第七章:多態性
1、“封裝”通過將數據的特征與行為結合在一起,創建了一種新的數據類型。“隱藏實現”通過將細節設置成PRivate,完成了接口與實現的分離。而多態性是站在“類”的角度來
處理這種邏輯上的分離的。
(chap7,P2)
2、“上傳”使得類的動態性得以實現,但需要注重的是,只有基類是public的情況下,擴展類的復寫才可以實現,比如下面的例子:
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、構造函數的調用順序:
①調用基類的構造函數。這是一個遞歸過程,因此會先創建繼續體系的根,然后是下一級派生類,依此類推,直到最后一個繼續類的構造函數
②成員對象按照其聲明的順序進行初始化
③執行繼續類的構造函數的正文。
其實,還不如這樣表述表決方便:在一個類的初始化過程中,先按成員對象的聲明順序初始化這些成員變量,然后執行其構造函數;假如有基類,則先初始化基類。
(chap7,P17)
5、假如要內存清理,則可以從基類開始寫一個函數,函數名可以自己定,但調用的時候,必須從頂層開始執行,這剛好與構造函數的調用順序相反。
(chap7,P18)
6、開始做java的時候,不要想著把整個程序做成一個類系,比較好的辦法是合成。
(chap7,P23)
新聞熱點
疑難解答