Java入門 第二季第三章 繼承
3-1 Java 中的繼承
★概念:繼承是類與類的一種關系,是一種“is a”的關系
圖:繼承關系——狗 和 動物
注:Java 中的繼承是單繼承,即一個類只有一個父類
★好處
●
子類擁有父類的所有屬性和方法,
但如果有private修飾,則子類不能使用該屬性或方法
●
實現代碼復用
★語法規則
class 子類 extends 父類
例:class Dog extends Animal{
……
}
Eclipse中,在創建類時,可以在 Superclass 中選擇父類
自動生成:
3-2 Java 中的方法重寫
★概念
如果子類對繼承父類的方法不滿意,是可以重寫父類繼承的方法的,當調用方法時會優先調用子類的方法。
★語法規則
a.返回值類型
b.方法名
c.參數類型及個數
都要與父類繼承的方法相同,才叫
方法的重寫
★實例:狗 和動物
圖:父類——動物
圖:子類——狗
圖:測試類
運行結果:年齡:1狗是可以會吃東西
3-3 Java 中的繼承初始化順序
★繼承的初始化順序
a.先初始化父類再初始化子類
b.先執行初始化對象中屬性,再執行構造方法中的初始化
★ 實例一:驗證先初始化父類再初始化子類
圖:父類——動物
圖:子類——狗
圖:測試類——調用eat()方法
運行結果:
★ 實例二:驗證先執行 初始化對象中的屬性,再執行構造方法中的初始化
圖:父類——動物
圖:測試類——調用eat()方法
運行結果:
★總結
3-4 Java 中的 final 的使用
使用final關鍵字做標識,有“最終的”含義,即 不可修改,不可變化
★final可以修飾類、方法、屬性和變量
●
final修飾類 ——該類不允許被繼承
●
final修飾方法 ——該方法不允許被覆蓋(重寫)
●
final修飾屬性 ——該類的屬性不會進行隱式的初始化(類的初始化屬性必須有值),或在構造方法中賦值(但只能選其一)
且不能在其他地方修改屬性的值。
●
final修飾變量 ——該變量的值只能賦一次值,即變為 常量
3-5 Java 中的 super 的使用
★super關鍵字:在對象的內部使用,可以代表父類對象
訪問父類的屬性
super.age
訪問父類的方法
super.eat()
★子類的構造的過程中必須調用其父類的構造方法,該過程隱式地使用了 super 關鍵字
如果子類的構造方法中沒有顯示調用父類的構造方法,則系統默認調用父類無參的構造方法。
如果顯式的調用構造方法,必須在子類的構造方法的第一行。
圖:示例 —— 顯式地調用父類的構造方法
如果子類構造方法中既沒有顯示調用父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯
圖:父類Animal(未聲明無參的構造函數)
圖:子類Dog(出錯)
圖:報錯提示
3-6 Java 中的 Object 類
Object類是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麼這個類默認繼承Object類。
Object類中的方法,適合所有子類。
★toString() 方法
●在Object類裡面定義 toString()方法的時候,返回對象的哈希code碼(對象地址字符串——唯一標識該對象)
● 可以通過重寫 toString() 方法表示出對象的屬性
圖:三個類之間的繼承關系
實例一:調用系統自帶的 toString()
運行結果:
注:imocc.Dog——包名 @後面——內存地址
實例二:自定義 toString() 方法
Step1:點擊Source,選擇Generate toString()
Step2: 選擇想要輸出的屬性,點擊確定
圖:生成及運行效果
★equals()方法
比較的是 對象的引用是否指向 同一塊內存地址
一般情況下比較兩個對象時,
比較它們的值是否一致,所以要進行重寫
實例一:調用系統自帶的 .equals()
注: .equasl() 和 “==”默認比較的都是地址 ——運行結果均為“兩個對象不相同”
實例二:自定義 toString() 方法
Step1:點擊Source,選擇Generate hashCode() and equals()
Step2: 選擇想要輸出的屬性,點擊確定
圖:生成的代碼
▲圖:類對象 與 類的對象 的區別