Java4Android之複用類

來源:互聯網
上載者:User

標籤:java4android   final   複用類   

本節內容是對《Thinking in Java》中第七章 複用類的筆記和總結

1 , 複用現有的代碼而不去破壞現有的代碼,有兩種方法:組合和繼承。

2,toString()方法。在類需要轉變成String對象的時候,就會調用該函數。例如有個A類的對象a , A a ;然後有語句 ”object:“+a;這時候其實是"object:"+a.toString();

3,惰性初始化。成員的初始化有很多種,我們在之前的學習中知道,如果是基礎資料型別 (Elementary Data Type)沒有初始化,則會被初始化一個預設的紙,例如int的會被初始化為0;而如果是對象引用,則會被初始化為null。在定義處的初始化要比建構函式的初始化還要早,但它只能實現千遍一律的初始化。靜態成員的初始化是在類載入的時候就初始化了,這個更早。對初始化代碼還可以用花括弧獨立起來,這個和在定義處初始化是一個效果。而惰性初始化是”在你要用到該成員的時候,初始化,然後再使用“。這種延緩的初始化往往可以減少負擔。因為需要才初始化嘛。

4,Java中類的繼承是通過extends來實現的,繼承後的衍生類別擁有基類的所有成員和方法。

5,每個類都可以配備一個public static void main(String[] args)方法,可方便單元測試。多個類同時擁有main函數也是沒有問題的,只有命令列調用的那個main函數才會被執行。還有就算類是四有類,它的main函數也是可以被任意調用的。
6,想調用基類的成員,需要通過super.xxx();否則如果在xxx()中再掉xxx()則是遞迴,很明顯你不是這個意思吧。

7,當建立一個匯出類的對象時,該對象包含了一個基類的子物件。這個子物件與你用基類直接建立的對象是一樣的。

8,帶參數的構造器。

如果沒有預設的基類構造器,或者想調用一個帶參數的基類構造器,就必須用關鍵字super顯式的編寫調用基類構造器的語句,並且配以適當的參數列表。調用基類構造器必須是你匯出類構造器要做的第一件事情(除你調用this調用其他自己構造其外)。

9,代理。代理是繼承和組合之間的中庸之道。因為我們將一個成員對象置於所要構造的類中(就像組合),但與此同時我們在新類中暴露該類成員對象的所有方法(就像繼承)。

10,名稱屏蔽。注意區分C++和Java對重載和覆寫的不同處理。Java中一般都是重載,如果非得覆寫,注意在函數前面加上@Override,則會覆寫基類的函數。否則都是重載。

11,在組合和繼承之間選擇。組合和繼承都是在新的類中放置子物件,組合是顯式的這麼做,而繼承是隱式的。如何選擇?組合技術常用於在新類中是有現有類的功能而非它的介面。即,在新類中嵌入某個對象,讓其實現所需要的功能,但新類的使用者看到的只是新類定義的介面,而非內嵌物件的介面。這個時候,一般在新類中嵌入一個現有類的private對象。但有時候也可以是public(很少),public意味這外部可以訪問該成員,可能是為了便於理解吧。

在繼承的時候,使用某個現有的類,並開發一個它的特殊版本。

12,protected關鍵字

“就使用者而言,這是private的,但對於繼承於此類的匯出類或者其他任何位於同一個包內的類來說,它卻是可以訪問的”。

在設計上,最好的方式還是將域保持為private,你應該一直保留“更改底層實現”的權利,然後通過protected方法來控制類的繼承者的存取權限。

13,向上轉型

“為新的類提供方法”並不是繼承技術中最重要的方面,其最重要的方面是用來表現新類和基類之間的關係。這種關係可以用“新類是現有類的一種類型”來概括。為什麼叫向上轉型,因為之前的類圖結構總是把基類放到上面,所以就習慣了。向上轉型是將一個較為專用的類型向較為通用的類型轉換,所以總是很安全的。匯出類是基類的一個超類,因為它總是包含了基類的所有,同時還可能擁有更多的方法和域。

如果某個方法為private,那它就不是類 的介面一部分。也就是向上轉型的時候調不到它的。

14,final關鍵字

final可以修飾資料,修飾方法,類。

1)final資料。final修飾變數是使得其不會改變,類似於C++的常量,static final經常這樣用,表示只有一份記憶體。final修飾的域不一定要在定義處初始化,可以在要用的時候初始化,這種叫“空白 final”有點類似於惰性初始化。初始化之後就改變不了它了。final修飾的參考資料表示你不能將該引用指向新的對象,但是對象本身的資料卻還是可以變化的。final參數是指你不能在這個方法裡面更改這個參數(或者引用重指),這種final參數主要是用在向匿名內部類傳遞資料 的時候用到。

2)final方法。把方法鎖定,以防止任何繼承類修改它的含義,即不會被覆蓋掉。

final 和private關鍵字。類中所有的private方法都隱式的指定為final的。因為匯出類無法取用private方法,所以也就無法覆蓋它。

“覆蓋”只有在某個方法是基類的介面的一部分時才會出現。如果一個方法是private,那它就不是基類介面的一部分。它僅是隱藏於類中的程式碼,只不過是有相同的名字而已。僅此。

3)final類。一個類被修飾為final,表示你不想任何類繼承它。當然final類裡面 的final域之類的,跟普通類裡面的沒有區別。不影響

15,初始化與類的載入

static代碼是在類被第一次使用的時候載入的。假如兩個類A,B,B extens A .那麼當B對象產生的時候,首先運行基類A的static代碼,然後是B的static代碼,然後當這些類代碼都執行完之後,對象就可以建立了。也就是執行對象相關代碼。

好,今天到這裡。


Java4Android之複用類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.