讀《java編程思想》7-複用類

複用類並非複製粘貼,修改一下代碼就夠了,
java提供兩種方式複用類,1組合、2繼承
 
一、組合,將已有對象置於新類中便可。
類中域爲基本類型時可以自動初始化爲0,對象引用則初始化爲null。
對象引用初始化的位置:
(1)在定義對象的位置
(2)類的構造器中
(3)正要使用對象以前,稱爲惰性初始化
(4)實例初始化 (相對於靜態初始化塊的實例初始化快中)
 
二、繼承
在基類名稱後接關鍵字extends,即可自動獲得基類中的全部域和方法。(private除外)
 
三、初始化基類
(1)當建立一個導出類的對象時,該對象包含一個基類的子對象。(內部)
爲了保證基類子對象正確初始化,則須要在導出類構造器中調用基類構造器執行初始化。
(2)構建的過程是從「基類」擴散的,因此基類在導出類構造器能夠訪問它以前,就已經完成了初始化。
(3)導出類默認構造器會自動調用基類默認構造器。若是基類沒有默認構造器或者想要調用帶參數的基類構造器,則必須使用super顯示調用,而且須要放在構造器的第一行。
 
四、代理
將一個成員對象置於所要構造的類中(相似組合),並在新的類中暴露改爲員對象的全部方法(相似繼承)
 
五、重載&覆寫
重載 方法名相同,參數列表不一樣。
覆寫 方法名相同,參數列表相同,使用@Override註解。
(都不能用返回值做爲判斷)
 
六、繼承仍是組合
(1)is-a 關係用繼承 has-a 關係用組合
(2)是否須要向上轉型?是則繼承,不是則組合
 
七、final關鍵字
即:」這是不可改變的「
(1)final數據
a. 常量:程序的整個運行過程當中值保持不變的量。
常量值:常量值又稱爲字面常量,它是經過數據直接表示的。如 整型常量 值、實型常量值(浮點等)、布爾型常量值、字符型和字符串常量值。
定義常量:常量不一樣於常量值,它能夠在程序中用符號來代替常量值使用,所以在使用前必須先定義。java中使用final 關鍵字來定義一個常量。
 
b. final + 基本數據類型,定義時賦值則爲編譯時常量。
c. final + 引用類型,則引用恆定不變。(指向的對象能夠被修改)
d. final常量初始化,要麼在定義時,要麼在構造器中。(空白final)
e. static final 常量名須要大寫。
f. final參數,表示方法執行中不能改變。
 
(2)final方法
該方法在繼承中禁止覆蓋。private方法隱式指定爲final。
 
(3)final類
該類禁止繼承。
 
八、理解繼承中的初始化順序,則從類加載和對象初始化開始。
(1)類初次使用時加載,當發現有基類時,則先加載基類。
加載類同時,static對象和static代碼塊 按照順序初始化。
 
(2)類加載完後,對象初始化。爲了保證對象的實例變量(成員變量)和實例代碼塊,在使用前初始化。
則對象初始化順序以下:
a. 實例對象和實例代碼塊 定義時按照順序初始化
b. 構造器中初始化
c. 方法內初始化
 
(3)當初始化對象時,當發現有基類,則會先初始化基類。順序參考第二步。
 
由上面三個緣由,纔會得出 讀《java編程思想》5-初始化與清理 中的結論:
父靜態成員變量->父靜態代碼快 -> 子靜態成員變量-> 子靜態代碼快 -> 父成員變量 -> 父代碼塊-> 父構造器 -> 子成員變量 -> 子代碼塊-> 子構造器
 
簡單說
先靜態 後非靜態
先成員 後構造器
先父後子
 
參考
[http://c.biancheng.net/view/763.html](http://c.biancheng.net/view/763.html)
相關文章
相關標籤/搜索