子類和父類之間繼承中構造函數的調用(二)

一、源碼:其中部分註釋是測試過程中添加的
class SuperClass{
    private int n;
    /*
    SuperClass(){
        System.out.println("SuperClass()");
    }
    */
    SuperClass(int n){
        System.out.println("SuperClass("+n+")");
        this.n = n;
    }
}
class SubClass extends SuperClass{
    private int n;
    
    SubClass(int n){
        //super(300);
        System.out.println("SubClass("+n+")");
        this.n = n;
    }
   
    SubClass(){
        super(300);
        System.out.println("SubClass()");
    }
}
public class TestSuperSub{
    public static void main(String[] args){
    //    SubClass sc1 = new SubClass();
        SubClass sc2 = new SubClass(400);
    }
}

二、測試的幾種情況:有些沒有寫結論,希望相互交流
/*
--前提:在父類和子類中分別含有無參構造函數和有參構造函數
1.在主函數中定義一個子類變量(無參),執行子類中的無參構造函數之前先執行父類的構造函數
a.子類中沒有寫調用父類的構造函數,則默認調用父類中的無參構造函數。
b.子類中調用父類的無參構造函數,則執行父類中的無參構造函數。
c.子類中調用父類的有參構造函數,則執行父類中的有參構造函數。

2.在主函數中定義一個子類變量(有參),執行子類中的有參構造函數之前先執行父類的構造函數
a.子類中沒有寫調用父類的構造函數,則默認調用父類中的無參構造函數。
b.子類中調用父類的無參構造函數,則執行父類中的無參構造函數。
c.子類中調用父類的有參構造函數,則執行父類中的有參構造函數。

--結論:上述編譯成功

--前提:在子類中含有無參構造函數和有參構造函數,在父類中只含有有參構造函數
1.在主函數中定義一個子類變量(無參),執行子類中的無參構造函數之前先執行父類的構造函數
a.子類中沒有寫調用父類的有參構造函數
--------------------------------------------------------------------------------------
G:\0_2012相關資料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 錯誤: 無法將類 SuperClass中的構造器 SuperClass應用到給定類
型;
        SubClass(int n){
                       ^
  需要: int
  找到: 沒有參數
  原因: 實際參數列表和形式參數列表長度不同
TestSuperSub.java:22: 錯誤: 無法將類 SuperClass中的構造器 SuperClass應用到給定類
型;
        SubClass(){
                  ^
  需要: int
  找到: 沒有參數
  原因: 實際參數列表和形式參數列表長度不同
2 個錯誤
=========================================================================================
b.子類中調用父類的有參構造函數
-------------------------------------------------------------------------------------
G:\0_2012相關資料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 錯誤: 無法將類 SuperClass中的構造器 SuperClass應用到給定類
型;
        SubClass(int n){
                       ^
  需要: int
  找到: 沒有參數
  原因: 實際參數列表和形式參數列表長度不同
1 個錯誤
=========================================================================================

2.在主函數中定義一個子類變量(有參),執行子類中的有參構造函數之前先執行父類的有參構造函數
a.子類中沒有寫調用父類的有參構造函數
--------------------------------------------------------------------------------------
G:\0_2012相關資料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 錯誤: 無法將類 SuperClass中的構造器 SuperClass應用到給定類
型;
        SubClass(int n){
                       ^
  需要: int
  找到: 沒有參數
  原因: 實際參數列表和形式參數列表長度不同
1 個錯誤
=========================================================================================
b.子類中調用父類的有參構造函數
-------------------------------------------------------------------------------------
--編譯成功

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