複用主要有兩種形式:組合和繼承。新的類是由現有的類的對象組成;用現有類的形式添加新代碼。
對於繼承需要額外注意的是,子類繼承了父類,當new子類的時候,父類的構造器會被調用。
判斷是使用組合還是繼承的時候,思考是否需要從新類向基類向上轉型。
final關鍵字:通常指的是這是無法改變的。不想改變出於兩個目的:設計和效率。
final數據:很多編程語言都有某種方法,來向編輯器告知數據是恆定不變的。例如永不改變的編譯時常量,例如運行時被初始化的值,不希望它發生改變。
對於編譯時常量,必須是基本數據類型,必須在定義時候賦值,用final關鍵字表示。
一個既是static又是final的域只佔有一段不能改變的存儲空間。既是static又是final的域需要用大寫表示。強調只有一份。
當對對象使用final而不是對基本數據類型使用final的時候,使引用不變,即一個引用被初始化指向一個對象,它無法指向另外一個對象。然而對象本身是可以被修改的。
Java允許存在空白final,聲明爲final但又沒有給定初值。但是在使用前必須初始化。這種方式提供了更多的靈活性。private final int j;然後把初始化過程放在構造器中。
final參數,在參數列表中以聲明的方式將參數指定爲final。在方法中無法更改參數所指向的對象。void with(final MethodA a){a=new MethodA()"//WRONG!
使用final方法的原因,把方法鎖定,防止任何繼承類修改含義,這是出於設計的考慮,確保繼承中方法不變,不會被覆蓋。類中所有的private方法都隱式,由於無法取用private,所以也就無法覆蓋。
如果某個方法是private,它就不是類的接口的一部分。它只是隱藏在類中的程序代碼。
final類,當某個類被整體定義爲final,就表明不打算繼承該類,不存在子類。