第七章:多態(tài)性
1、“封裝”通過將數(shù)據(jù)的特征與行為結合在一起,創(chuàng)建了一種新的數(shù)據(jù)類型。“隱藏實現(xiàn)”通過將細節(jié)設置成private,完成了接口與實現(xiàn)的分離。而多態(tài)性是站在“類”的角度來
處理這種邏輯上的分離的。
(chap7,P2)
2、“上傳”使得類的動態(tài)性得以實現(xiàn),但需要注意的是,只有基類是public的情況下,擴展類的復寫才可以實現(xiàn),比如下面的例子:
public class Test {
private void f() {
System.out.println("private f()");
}
public static void main(String[] args) {
Test po = new Derived();
po.f();
}
}
class Derived extends Test {
public void f() {
System.out.println("public f()");
}
}
例子中,Test.f是private的,所以Derived.f其實不是Test.f的復寫,Derived.f是一個全新的方法,它連重載都算不上,因為Derived根本看不到基類的f()。
所以,輸出的應該是private f(),而不是public f()。
(chap7,P12)
3、如果類包含一個或多個抽象方法,那么這個類必須定義為abstract,但如果類沒有abstract方法,也可以將類定義為abstract。
(chap7,P13)
4、構造函數(shù)的調用順序:
①調用基類的構造函數(shù)。這是一個遞歸過程,因此會先創(chuàng)建繼承體系的根,然后是下一級派生類,依此類推,直到最后一個繼承類的構造函數(shù)
②成員對象按照其聲明的順序進行初始化
③執(zhí)行繼承類的構造函數(shù)的正文。
其實,還不如這樣表述表決方便:在一個類的初始化過程中,先按成員對象的聲明順序初始化這些成員變量,然后執(zhí)行其構造函數(shù);如果有基類,則先初始化基類。
(chap7,P17)
5、如果要內存清理,則可以從基類開始寫一個函數(shù),函數(shù)名可以自己定,但調用的時候,必須從頂層開始執(zhí)行,這剛好與構造函數(shù)的調用順序相反。
(chap7,P18)
6、開始做Java的時候,不要想著把整個程序做成一個類系,比較好的辦法是合成。
(chap7,P23)