6:復用類
合成所使用的語法
如果想對reference進行初始化,那么可以在以下幾個時間進行:
1。在定義對象的時候。這就意味著在構造函數調用之前,它們已經初始化完畢了。
2。在這個類的構造函數里。
3。在即將使用那個對象之前。這種做法通常被成為“偷懶初始化(lazy initialization)”。如果碰到創建對象的代價很高,或者不是每次都需要創建對象的時候,這種做法就能降低程序的開銷了。
繼承所使用的語法。
繼承設計方面有一條通用準則,那就是把數據都設成private的,把方法都設成public的。當然碰到特殊情況還要調整,但是這還是一條非常有用的準則。
基類的初始化
構造行為是從積累“向外”發展的,所以基類會在派生類的構造函數訪問它之前先進行初始化。
帶參數的構造函數
對派生類構造函數而言,調用基類的構造函數應該是它做的第一件事。
捕獲積累構造函數拋出的異常。
把合成和繼承結合起來
雖然編譯器會強制你對基類進行初始化,并且會要求你在構造函數的開始部分完成初始化。但是它不會檢查你是不是進行了成員對象的初始化,因此你只能自己留神了。
確保進行妥善地清理
先按照創建對象的相反順序進行類的清理。然后調用基類的清理方法。
名字的遮蓋
用合成還是繼承
繼承要表達的是一種“是(is-a)”關系,而合成要表達的是“有(has-s)”關系。
protected
Java的protected也提供package的權限。
漸進式的開發
上傳(upcasting):總是安全的。
合成還是繼承,再探討。
final關鍵詞
Final的數據
對primitive來說,final會將這個值定義成常量,但是對于對象的reference而言,final的意思則是這個reference是常量。Java沒有提供將某個對象作成常量的方法。這種局限性也體現在數組上,因為它也是一個對象。
空白的final數據(Blank finals)
一定得為final數據賦值,要么是在定義數據的時候用一個表達式賦值,要么是在構造函數里面進行賦值。
Final的參數
Java允許你在參數表中生命參數是final的,你不能在方法里讓參數reference指向另一個對象。
Final方法
final和private
private方法都隱含有final的意思。
Final類
不允許別人去繼承。
小心使用final
初始化與類的裝載
繼承情況下的初始化
總結:本章主要講述了繼承和合成的概念和用法及一些注意事項。盡管面向對象的變成會反復強調繼承,但是當你著手設計的時候,通唱情況下還是應該先考慮合成,只有在必要的時候才使用繼承。合成會更靈活。
2005年03月12日 3:42 AM