6:復(fù)用類

合成所使用的語法
  如果想對reference進行初始化,那么可以在以下幾個時間進行:
    1。在定義對象的時候。這就意味著在構(gòu)造函數(shù)調(diào)用之前,它們已經(jīng)初始化完畢了。
    2。在這個類的構(gòu)造函數(shù)里。
    3。在即將使用那個對象之前。這種做法通常被成為“偷懶初始化(lazy initialization)”。如果碰到創(chuàng)建對象的代價很高,或者不是每次都需要創(chuàng)建對象的時候,這種做法就能降低程序的開銷了。
 
  繼承所使用的語法。
    繼承設(shè)計方面有一條通用準則,那就是把數(shù)據(jù)都設(shè)成private的,把方法都設(shè)成public的。當然碰到特殊情況還要調(diào)整,但是這還是一條非常有用的準則。
 
  基類的初始化
    構(gòu)造行為是從積累“向外”發(fā)展的,所以基類會在派生類的構(gòu)造函數(shù)訪問它之前先進行初始化。
 
  帶參數(shù)的構(gòu)造函數(shù)
    對派生類構(gòu)造函數(shù)而言,調(diào)用基類的構(gòu)造函數(shù)應(yīng)該是它做的第一件事。
 
  捕獲積累構(gòu)造函數(shù)拋出的異常。


把合成和繼承結(jié)合起來
  雖然編譯器會強制你對基類進行初始化,并且會要求你在構(gòu)造函數(shù)的開始部分完成初始化。但是它不會檢查你是不是進行了成員對象的初始化,因此你只能自己留神了。
 
  確保進行妥善地清理
    先按照創(chuàng)建對象的相反順序進行類的清理。然后調(diào)用基類的清理方法。
 
  名字的遮蓋


用合成還是繼承
  繼承要表達的是一種“是(is-a)”關(guān)系,而合成要表達的是“有(has-s)”關(guān)系。
 
  protected
    Java的protected也提供package的權(quán)限。

漸進式的開發(fā)

上傳(upcasting):總是安全的。

合成還是繼承,再探討。

final關(guān)鍵詞
  Final的數(shù)據(jù)
    對primitive來說,final會將這個值定義成常量,但是對于對象的reference而言,final的意思則是這個reference是常量。Java沒有提供將某個對象作成常量的方法。這種局限性也體現(xiàn)在數(shù)組上,因為它也是一個對象。
 
  空白的final數(shù)據(jù)(Blank finals)
    一定得為final數(shù)據(jù)賦值,要么是在定義數(shù)據(jù)的時候用一個表達式賦值,要么是在構(gòu)造函數(shù)里面進行賦值。
 
  Final的參數(shù)
    Java允許你在參數(shù)表中生命參數(shù)是final的,你不能在方法里讓參數(shù)reference指向另一個對象。
 
  Final方法
 
  final和private
    private方法都隱含有final的意思。
 
  Final類
    不允許別人去繼承。
 
  小心使用final


初始化與類的裝載
  繼承情況下的初始化

總結(jié):本章主要講述了繼承和合成的概念和用法及一些注意事項。盡管面向?qū)ο蟮淖兂蓵磸?fù)強調(diào)繼承,但是當你著手設(shè)計的時候,通唱情況下還是應(yīng)該先考慮合成,只有在必要的時候才使用繼承。合成會更靈活。




                                                                                 2005年03月12日 3:42 AM