1. 類的復(fù)用有兩種方法:組合(composition)和繼承
組合技術(shù)通常用于想在新類中使用現(xiàn)有類的功能而非它的接口這種情形,一般在新類中嵌入一個現(xiàn)有類的private對象。但有時,允許類的用戶訪問新類中的組合部分是極具意義的。如果成員對象自身都隱藏了具體實(shí)現(xiàn),那么將它聲明為public也是安全的。
2. 為了繼承,一般的規(guī)則是將所有的數(shù)據(jù)成員都指定為private,將所有的方法指定為protected/public。
3. 編譯器僅會在子類的無參構(gòu)造器中自動調(diào)用父類的無參構(gòu)造器,如果父類沒有無參構(gòu)造器,或者要在子類的含參構(gòu)造器中調(diào)用父類的構(gòu)造器,就必須用關(guān)鍵字super顯式地調(diào)用父類構(gòu)造器。
4. dispose()方法可以將未存于內(nèi)存之中的東西恢復(fù)到對象存在之前的狀態(tài)。注意清理的順序與生成的順序相反,先執(zhí)行類的所有特定的清理動作,然后調(diào)用基類的清理方法。
最好除了內(nèi)存以外,不要以來垃圾回收器去做任何事。如果需要進(jìn)行清理,最好是編寫自己的清理方法,但不要依賴finalize()
5. 做了個實(shí)驗(yàn),得出父類的private方法會因?yàn)樽宇惖耐椒ǘ[藏,但仍然存在。
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使數(shù)值恒定不變;對于對象引用,final使引用恒定不變,但對象本身是可以被修改的。
7. 空白final,字段可以被聲明為final而不給定初值,但是必須在每個構(gòu)造器中對final進(jìn)行賦值。
8. final 參數(shù)
void f(final int i) 這樣就不能在f程序塊中修改i的值了
9. final 方法
使用final方法的原因有兩個:一是把方法鎖定,以防被繼承類修改;二是效率,將一個方法指明為final,就是同意編輯器將針對該方法的所有調(diào)用轉(zhuǎn)為內(nèi)嵌調(diào)用。
類中所有的private方法都隱式地指定為是final的,因此對private方法添加final修飾詞沒有什么意義。
10. final 類
由于無法被繼承,final類中的所有方法都被隱式地定為final,因?yàn)闊o法覆蓋它們。