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