我們在以前的學習中,我們會了C#中的繼承,今天我們來了解了解Java中的繼承,其實都大同小異啦!
1.語法
修飾符 SubClass extends SuperClass(){
//類定義部分
}
eg:public Dog extends Pet(){
}
我們說Dog繼承了Pet
2.那麼Dog究竟可以繼承Pet類中的什麼東西?
01.當這兩個類位於同一個包時,Dog類繼承Pet類中Public,protected和默認(friendly)訪問級別的成員變量和成員方法。
02.當這兩個類位於不同一個包時,Dog類繼承Pet類中Public和protected訪問級別的成員變量和成員方法。(不能繼承默認訪問級別的)
03.無法繼承private修飾的屬性和方法。
04.無法繼承父類的構造方法。
3.Java中只支持多繼承,即每個類只能有一個直接父類,但它可有多個間接父類
4.方法的重寫
在子類中可以根據需求對父類繼承的方法進行重新編寫,稱為方法的重寫或方法的覆蓋
需求:
01.重寫方法和被重寫方法必須具有相同的方法名。
02.重寫方法和被重寫方法必須具有相同的參數列表。
03.重寫方法的返回值類型必須和被重寫方法的返回值類型相同或是其子類。
04.重寫方法不能縮小被重寫方法的訪問權限。
5.super關鍵字
super代表對當前對象的之前直接父類對象的默認引用。在子類中可以通過super關鍵字來訪問分類的成員。
注意點:
01.super必須出現在子類(子類的方法和構造方法)中,而不是其他位置。
02.可以訪問父類的成員,如父類的屬性,方法,構造方法。‘
03.注意訪問權限的限制,如無法通過super訪問private成員。
6.繼承關系中的構造方法
eg:Dog類的構造方法
public Dog(String name,String strain){
super.(name);
this.strain=strain;
}
繼承條件下的構造方法的調用規則如下:
01.如果子類的構造方法中沒有通過super顯示調用父類的有參構造方法,也沒有通過this顯式調用自身的其他構造方法,則系統會默認先調用調用父類的無參構造方法。在這種情況下,有沒有“super();”語句,效果都說一樣的。
02.如果子類的構造方法中通過super顯示調用父類的有參構造方法,則將執行父類相應的構造方法,而不執行父類無參構造方法。
03.如果子類的構造方法中通過this顯式調用自身的其他構造方法,則在相應構造方法中應用以上兩條規則。
04.特別注意的是,如果存在多繼承關系,則在創建一個子類對象時,以上規則會多次向更高一級父類應用,一直到執行父類Object類的無參構造方法為止。