Java學習總結第十四天Java類的繼承

類的繼承

Java的繼承具有單繼承的特點,每個子類只有一個直接父類。

Java的繼承是通過extends關鍵字來實現,實現繼承的類被稱爲子類,被繼承的類稱爲父類。父類和子類的關係是一種一般和特殊的關係。例如水果和蘋果的關係,蘋果繼承了水果,蘋果是水果的子類,則蘋果是一種特殊的水果。

定義繼承的形式爲:

[訪問權限]   class 類名  [extends    父類]

{

    類體

}

Java中的繼承是通過extends關鍵字來實現的,在定義類時使用extends關鍵字指明新定義類的父類,就在兩個類之間建立了繼承關係。

新定義的類稱爲子類,它可以從父類那裏繼承所有非private的屬性和方法作爲自己的成員。

下面是Fruit類的代碼:

 

接下來再定義該Fruit類的子類Apple,程序如下:

 

子類擴展了父類,將可以獲得父類的全部屬性和方法,但不能獲得父類構造器

Java裏的繼承都是單繼承,也就是只能有一個直接的父類,可以有n個間接父類。

 

重寫父類的方法:

子類擴展了父類,子類是一個特殊的父類。大部分時候,子類總是以父類爲基礎,額外增加新的成員變量,和方法。擔憂一種情況例外:子類需要重寫父類的方法。例如鳥類都包含了飛翔方法,其中鴕鳥是一種特殊的鳥類,因此鴕鳥應該是鳥的子類,因此它也將從鳥類獲得飛翔方法,但這個飛翔方法明顯不適合鴕鳥,爲此,鴕鳥需要重寫鳥類的方法。

下面程序先定義了一個Bird類:

 

下面再定義一個Ostrich類,這個類擴展了Bird類,重寫了Brid類的fly()方法:

 

這種子類包含於父類同名方法的現象被稱爲重寫,也被稱爲方法覆蓋。

方法的重寫要遵循“兩同兩小一大” 指的是:方法名相同,形參列表相同。返回值類型更小或相同,拋出的異常更小或相同,訪問控制權限要更大。

 

super限定

super是Java提供的一個關鍵字,super用於限定該對象調用它從父類繼承得到的實例變量或方法。正如this不能出現在static修飾的方法中一樣,super也不能出現在static修飾的方法中。

 

如果在某個方法中訪問名爲a的成員變量,但沒有顯式指定調用者,則系統查找a的順序爲:

(1)查找該方法中是否有名爲啊的局部變量。

(2)查找當前類中是否包含名爲a的成員變量。

(3)查找a的直接父類中是否包含名爲a的成員變量,一次上溯a的所有父類,知道java.lang.Object類,如果最終不能找到名爲a的成員變量,則系統出現編譯錯誤。

調用父類構造器

子類構造器總會調用父類構造器。

如果子類構造器沒有顯式使用super調用父類構造器;子類構造器默認會調用父類無參數的構造器。

創建一個子類實例時,總會先調用最頂層父類的構造器。

 

 

從上面程序中不難看出,使用super調用和使用this調用也很像,區別在於super調用的是父類的構造器,而this調用的是同一個類中重載的構造器。因此,使用super調用父類構造器也必須出現在子類構造器執行體的第一行。

子類構造器調用父類構造器分如下幾種情況:

Ø 子類構造器執行體的第一行使用super顯式調用父類構造器,系統將根據super調用裏傳入的實參列表調用父類對應的構造器。

Ø 子類構造器執行體的第一行代碼使用this顯式調用本類中重載的構造器,系統將根據this調用裏傳入的實參列表調用本類中的另一個構造器。執行本類中另一個構造器時即會調用父類構造器。

Ø 子類構造器執行體中既沒有super調用,也沒有this調用,系統將會在執行子類構造器之前,隱式調用父類無參數構造器。

 

 

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