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