1. 程式人生 > >java繼承總結

java繼承總結

java與c++不同的是,java是單繼承(一個直接父類)。
從子類的角度看,子類擴充套件了父類,從父類的角度看,父類派生了子類。
1 繼承特點
子類獲得父類(直接的和間接的)的所有成員(包括靜態與非靜態,甚至private成員,只是子類無法訪問而已),但並不會繼承父類的構造器。
2 重寫父類方法
什麼是重寫(也叫覆蓋):滿足3同2小1大

  • 3同: 方法名 ,引數列表,同是類方法或者例項方法(一個類方法,一個例項方法會導致編譯出錯)

  • 2小:子類方法返回值型別比父類方法小或相等 , 子類方法宣告丟擲的異常要比父類類方法宣告丟擲的異常小或者相等

  • 1大

    :子類方法的訪問許可權要比父類方法的訪問許可權大或者相等。
    注意:如果父類方法有private許可權,則該方法是對子類方法隱藏的,因此子類無法訪問該方法,也就是無法重寫該方法。如果子類定義了一個與父類private方法具有相同的方法名,相同引數列表,相同返回值的方法,這依然不是重寫,只是定義了一個新的方法而已。
    3 super限定
    子類重寫了父類的方法,那麼若子類想要呼叫被覆蓋的方法呢?,這時就可以使用super(針對例項方法)或父類名(針對類方法)來限定呼叫的是父裡定義的方法。
    注意:正如this不能出現在static修飾的方法中一樣,super也不能出現在static修飾的方法中,因為this和super都是與對應物件相關的。
    若super用於構造器中,則super用於限定該構造器初始化的是該物件從父類繼承得到的例項變數,而不是自己的例項變數。(這就說明了當建立一個子類物件時,同是會呼叫父類構造器建立一個父類物件)。
    4呼叫父類構造器

    子類不會獲得父類的構造器,但子類可以呼叫父類的構造器,類似於同一個類中多個構造器的相互呼叫。
    在一個構造器中,呼叫另一個構造器用this來完成,在子類中呼叫父類構造器使用super(super(引數列表))來完成。與this類似。所以使用super呼叫父類構造器也必須出現在子類構造器執行體的第一行,所以this和super不會同時出現。
    子類構造器呼叫父類構造器通常有以下幾種情況:

  • 1 子類構造器執行體的第一行使用super顯式呼叫父類構造器,系統將會根據super傳入的實參呼叫父類相應的構造器。

  • 2 子類構造器執行體的第一行使用this顯式呼叫本類中過載的構造器,系統將會根據this傳入的實參呼叫本類中過載的構造器,執行本類另一個構造器時即會呼叫父類構造器。

  • 3 子類構造器既沒有super,也沒有this,系統將會在執行子類構造器之前隱式呼叫父類的無參構造器。