標籤:
7.1繼承的起源
繼承(Inheritance),即在物件導向編程中,可以通過擴充(extends)一個已有的類,並繼承該類的屬性的行為,來建立一個新的類。
已有的類稱為父類(也可以稱為基類,超類),而新類稱為子類(也可以稱為衍生類別)。
繼承的優點:代碼的可重用性;父類的屬性和方法可用於子類;子類可以擴充父類的屬性和方法;設計應用程式變得更加簡單。
7.2 繼承的使用原則
- 觀察要使用的類,確定它們之間共同的和特有的屬性和行為,將這些共性資料移轉到父類裡,便於子類中進行方法和屬性的重用。
- 對於不同的屬性和行為,在子類中可以重新定義。
- 在Java中,一個類只有一個父類。一個類不能同時繼承兩個類。
- 所有類的根類都是Object
子類繼承父類時,在子類對象產生前會先產生一個父類對象,然後在此基礎上擴充子類特有的屬性和方法。因此子類可以繼承父類所有的屬性和方法。所以繼承也叫擴充。
7.3 重寫
重寫發生在父類和子類之間,子類的方法名和父類相同,參數列表也相同,傳回型別也相同。當調用方法時,優先調用子類重寫的方法。如果子類沒有重寫父類的方法,那麼就調用父類的方法。
在方法前,可以加上註解@Override,強行檢測當前方法是否重寫了父類方法。如果沒有重寫到父類方法,則編譯錯誤。
finalize()是在記憶體回收對象之前,做一些清理工作。
7.4 super代表父類對象,super()代表父類的構造方法,產生父類對象。子類繼承於父類,如果在子類構造方法中沒有通過super()調用父類的構造方法產生父類對象,虛擬機器會自動加上super()。如果父類中沒有提供無參構造方法,那麼子類必須通過super(實參)進行顯示調用。否則,子類無法通過super()進行父類無參構造方法的調用,從而編譯錯誤。super()必須是子類構造方法的第一行代碼
7.5 final
關鍵字final表示變數不可被修改;方法不能被重寫;類不能被繼承。
final 類型修飾變數時,如果修飾基本類型,表示基本類型的值不能改變;如果修飾參考型別,表示該變數不能指向別的對象,但對象的屬性值可以改變。
7.6 構造方法不能被子類所繼承,但子類對象建立時,會調用父類的構造方法產生父類對象。由於子類對象中包含完整的父類對象,所以父類對象中的所有屬性和方法都是可以繼承的(包括私人屬性和私人方法)。只是私人屬性和私人方法不能被子類直接存取。
java物件導向編程— —第七章 繼承