關於Java子類繼承時,為什么父類要有無參構造方法


當父類沒有默認的構造方法的時候,子類的構造方法就會出錯

Snipaste_2021-03-16_13-02-22

我們先來看幾個問題

1.為什么在實例化子類的對象的時候會調用先調用父類的構造方法?

答:因為子類繼承父類之后,獲取到了父類的內容(屬性/字段),而這些內容在使用之前必須先初始化,所以必須先調用父類的構造函數進行內容的初始化.

2、基類在哪里調用了父類的構造方法?

答:在子類的構造方法的第一行中默認(不顯示)調用super();即調用了父類構造方法

如果父類里面沒有定義參數為空的構造方法,那么必須在子類的構造方法的第一行顯示的調用super(參數);語句調用父類當中其它的構造方法.

如果子類當中的構造方法的第一行寫了this();那么默認(不顯示)的那個super();語句就會不起作用.

.因為super()和this()都只能定義在構造方法的第一行.

解決方法

1.在父類的那里再寫一個無參的構造方法

public class Demo6 {
    Demo6(int n , int t){}
    Demo6(){}//無參的構造方法
}
class Test extends Demo6{
    Test(){}
}

2.在子類構造函數的第一行那里指定調用父類的有參的構造方法 即super(參數);

public class Demo6 {
    Demo6(int n , int t){}

}
class Test extends Demo6{
    Test(int n , int t){
        super(n , t);//必須寫在第一行
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM