Java學習筆記之繼承

不知為何就叫呵呵發表於2016-08-11

1.使用關鍵字extends;

2.java 是單繼承,即只能繼承一個直接父類;

3.不能繼承private,final修飾的成員變數、方法,以及構造方法;對於父類的包訪問許可權成員變數和方法,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;

4.若子類不直接使用super呼叫父類構造方法,系統會自動呼叫super()呼叫父類的無參構造方法,

  此時,若父類定義了有參構造方法而沒有定義無參構造方法則編譯不透過。

5. 子類可以透過super呼叫父類的方法和屬性,以方法簽名區分方法,即方法名和引數列表,且必須放在該方法的第一條語句(可以是:System.out.print(super.方法名);的形式使用):
  5.1 super(引數列表);//這樣會呼叫父類的構造方法,只能在構造方法中使用,因為構造方法只能在new一物件的同時直接呼叫,而不能顯示地呼叫。

  5.2 super.成員變數 或 super.方法;//呼叫父類的屬性和方法。

6. 子類重寫父類方法時,必須返回型別相同;若子類具有與父類同名方法,但引數列表不同,則不是重寫而是過載,屬於不同的方法。

7.子類方法不能丟擲比父類更多的異常。子類方法丟擲的異常不許和父類方法丟擲的異常相同,或者子類方法丟擲的異常是子類方法丟擲的異常類的子類。例如:Base base=new Sub();編譯的時候只是看到了Base型別,所以不能捕獲Base類宣告之外的型別,否則編譯出錯,但是如果不捕獲這些異常,將導致程式異常終止。

8.子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法。在編譯時,子類定義的靜態方法也必須滿足與方法覆蓋類似的約束:方法的引數簽名一致,返回型別一致,不能縮小父類方法的訪問許可權,不能丟擲更多的異常。

9.父類的非靜態方法不能被子類覆蓋為靜態方法;父類的靜態方法不能被子類覆蓋為非靜態方法。

10.父類的非抽象方法可以被覆蓋為抽象方法。這樣是:普通類的子類是抽象類,並且,非抽象方法被抽象方法覆蓋。

相關文章