1. 類的復用有兩種方法:組合(composition)和繼承
組合技術通常用于想在新類中使用現有類的功能而非它的接口這種情形,一般在新類中嵌入一個現有類的private對象。但有時,允許類的用戶訪問新類中的組合部分是極具意義的。如果成員對象自身都隱藏了具體實現,那么將它聲明為public也是安全的。
2. 為了繼承,一般的規則是將所有的數據成員都指定為private,將所有的方法指定為protected/public。
3. 編譯器僅會在子類的無參構造器中自動調用父類的無參構造器,如果父類沒有無參構造器,或者要在子類的含參構造器中調用父類的構造器,就必須用關鍵字super顯式地調用父類構造器。
4. dispose()方法可以將未存于內存之中的東西恢復到對象存在之前的狀態。注意清理的順序與生成的順序相反,先執行類的所有特定的清理動作,然后調用基類的清理方法。
最好除了內存以外,不要以來垃圾回收器去做任何事。如果需要進行清理,最好是編寫自己的清理方法,但不要依賴finalize()
5. 做了個實驗,得出父類的private方法會因為子類的同名方法而隱藏,但仍然存在。
class Father {
private void f1() {
System.out.println("Father.f1() is invoked");
}
public void f2() {
f1();
System.out.println("Father.f2() is invoked");
}
}
class Child extends Father {
public void f1() {
System.out.println("Child.f1() is invoked");
}
}
public class TestHiding {
public static void main(String[] args) {
Child c = new Child();
c.f1();
c.f2();
}
}
6. 對于基本類型,final使數值恒定不變;對于對象引用,final使引用恒定不變,但對象本身是可以被修改的。
7. 空白final,字段可以被聲明為final而不給定初值,但是必須在每個構造器中對final進行賦值。
8. final 參數
void f(final int i) 這樣就不能在f程序塊中修改i的值了
9. final 方法
使用final方法的原因有兩個:一是把方法鎖定,以防被繼承類修改;二是效率,將一個方法指明為final,就是同意編輯器將針對該方法的所有調用轉為內嵌調用。
類中所有的private方法都隱式地指定為是final的,因此對private方法添加final修飾詞沒有什么意義。
10. final 類
由于無法被繼承,final類中的所有方法都被隱式地定為final,因為無法覆蓋它們。