1.java代碼的復用方式
- 繼承
- 初始化基類
導出類對象包含一個基類的子對象,因此導出類初始化之前,編譯器首先調用基類的構造器對基類進行初始化。如果基類構造函數帶參數,那么導出類的構造函數中需要顯示的利用super關鍵字調用基類構造器(因為需要顯示的給出傳入的參數列表)。
- 初始化基類
- 組合
新類中包含現已存在的類的引用。那么,若要初始化這些對象可以通過三種方式:第一,在類定義對象的地方,使用new關鍵字直接初始化。這意味在構造器調用之前被初始化;第二,在構造器中初始化;第三,在要使用該對象之前。
2.代理
既暴露基類的方法,又在導出類中包含基類的引用。
3.組合與繼承之間的選擇
組合用于想在新類中使用現有類的功能而非現有類的接口,即在現有類中嵌入某個對象,讓新類實現實現所需要的功能,但新類用戶看到的只是新類所定義的接口,而非嵌入對象的接口。因此,為實現此結果,需要在新類中嵌入一個private的現有類對象。
但也有另一種情況,允許新類的用戶訪問現有類對象,這種情況下,只要現有類隱藏了自身的具體實現,那么這種做法就是安全的。使現有成員稱為public有助于用戶了解如何使用新類。
4.protected
就類用戶而言,它是private;然而,對于繼承與此類的導出類或者位于同一個包內的類來說,它是可以訪問的(protected提供了包內訪問權限)。
5.向上轉型
新類是現有類的一種類型。由于導出類確保基類中所有的方法在導出類同樣有效,所以向基類中發送的消息同樣可以向導出類發送。
在向上轉型的過程中,類接口唯一可能發生的事情是丟失方法
6.final
編譯常量:這種情況有兩點要求,第一,必須是基本類型,第二,定義時必須初始化。
運行常量:在運行時被初始化,且不能被改變。
當對對象的引用使用final時,表示引用恒定不變,引用本身不可變,被引用的對象是可變的。
final方法:private方法默認帶final修飾。且final修飾的方法不允許被覆蓋。