當父類沒有默認的構造方法的時候,子類的構造方法就會出錯
我們先來看幾個問題
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);//必須寫在第一行
}
}