Java編程思想(第四版)筆記(二)

第7章 複用類

7.6 protected關鍵字

指明“就類用戶而言,這是private的,但對於任何繼承於此類或其他任何位於同一個包內的類來說,它卻是可以訪問的。”

儘管可以創建protected域,但是最好的方式還是把域保持爲private;你應該一直保留“更改底層實現”的權利,然後通過protected方法來控制類的繼承者的訪問權限。

7.7 向上轉型

由導出類轉型成基類(由子類轉換爲父類),在繼承圖上是向上移動的,因此一般稱爲向上移動。

由於向上轉型是從一個較專用類型向較通用類型轉換,所以總是很安全的。

儘管在OOP的過程中多次強調繼承,但這並不意味着要儘可能使用它。相反,應當慎用這一技術,其使用場合僅限於你確信使用該技術確實有效的情況。

到底是該用組合還是用繼承,一個最清晰的判斷方法就是問一問自己是否需要從新類向基類進行向上轉型。如果必須向上轉型,則繼承是必要的;但如果不需要,則應當好好考慮自己是否需要繼承。

7.8 final關鍵字

7.8.1 final數據

對於基本類型,final使數值恆定不變;而對於對象引用,final使引用恆定不變。一旦引用被初始化指向一個對象,就無法再把它改爲指向另一個對象。然而,對象其自身卻是可以改變的,Java並未提供使任何對象恆定不變的途徑(但可以自己編寫類以取得使對象恆定不變的效果)。這一限制同樣適用於數組,它也是對象。

Java允許在參數列表中以聲明的方式將參數指明爲final。這意味着你無法在方法中更改參數引用所指向的對象。這一特性主要用來向匿名內部類傳遞數據。

7.8.2 final方法

使用final方法的原因有兩個。一、把方法鎖定,以防止任何繼承類修改它的含義。這是出於設計的考慮:想要確保在繼承中使方法行爲保持不變,並且不會被覆蓋。二、效率。事實上,這種做法正在逐漸受到勸阻,應該讓編譯器和JVM去處理效率問題。

類中所有的private方法都隱式地指定爲是final的。

7.8.3 final類

當將某個類的整體定義爲final時,就表面了你不打算繼承該類,而且也不允許別人這樣做。由於final類禁止繼承,所以final類中所有的方法都隱式指定爲final的,因爲無法覆蓋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章