天天看點

java類的繼承

java中的繼承用extends關鍵字來實作,被繼承的類叫做超類、父類、基類,實作繼承的類稱為子類、派生類。

子類是一種特殊的父類,是以可以看作父類是大類,子類是小類。

extends實際上是拓展的意思,而父類和子類的關系實際上用拓展來解釋似乎更加的恰當,子類在父類功能的基礎上增加新的功能。

在繼承中,除開父類的構造器以外,子類幾乎可以繼承父類所有的功能和屬性。

每個類最多隻能有一個直接的父類,可以有無限多個間接父類,就像人一樣,隻能有一個親生父親。

若一個類定義的時候沒有顯示定義直接父類,則預設繼承java.lang.object,他是所有類的父類,是以所有的java對象都可以調用java.lang.object的執行個體方法。

父類引用可以指向子類對象,即聲明一個父類型的變量可以執行個體化為子類的對象,這也是java多态性的一個重要的實作方式。除此之外,方法的重載也是多态性的實作方式之一。

需要注意的是,重寫方法和被重寫的方法必須同時都是類方法或者同時都不是類方法。

繼承中還有一個很重要的概念是重寫,對于子類重寫過的方法,使用時究竟使用重寫前的版本還是重寫後的版本,取決于對象的類型而不是引用的類型。

重寫的時候,子類方法會覆寫父類的方法,父類private方法不可被重寫。

有的時候,當子類定義了與父類同名的屬性時,也會覆寫父類的屬性。正常情況下,子類定義的方法、子類屬性直接通路該屬性時,都會預設通路覆寫後的方法和屬性而無法通路到被覆寫的方法和屬性。但是在子類定義的執行個體方法中可以通過super來通路父類被覆寫的方法和屬性。

如果子類中沒有和父類同名的屬性,那麼通路的時候不需要用super,可以直接通路。和this一樣,super也不能出現static方法中。

繼承的時候不繼承父類的構造器,如果在子類中一定要用的話,也可以通過super來調用。而即使不顯示的調用父類構造器,系統也會預設在子類構造器執行體的第一行調用父類構造器一次,隻不過是調用父類的無參構造器。

super調用和this調用不會同時出現。

子類構造器調用父類構造器有幾種情況:

1.super顯示調用,系統會根據super裡的實參清單選擇調用父類的哪個構造器。

2.子類構造器執行體的第一行用了this調用本類重載的構造器,那麼在執行調用的構造器的第一行會調用父類的構造器。

3.子類中既沒有this調用也沒有super調用,系統會預設在子類構造器執行體的第一行調用父類的無參構造。

建立任何對象總是從該類繼承樹的最頂層構造開始執行,然後依次向下,最後才是本類。

上一篇: java數組