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();System.out.println("SubClass(" + n + ")");this.n = n;}SubClass() {super(300);System.out.println("SubClass()");}}public class TestSuperSub {public static void main(String arg[]) {SubClass sc1 = new SubClass();//SubClass sc2 = new SubClass(400);}}在執(zhí)行main的第一句 SubClass sc1 = new SubClass();時,應(yīng)該調(diào)用的是SubClass() {super(300);System.out.println("SubClass()");}這個構(gòu)造方法,此方法內(nèi)有個super(300);應(yīng)該調(diào)用的是父類的重載的第二個方法SuperClass(int n) {System.out.println("SuperClass(" + n + ")");this.n = n;} 為什么,我注釋了 父類的第一個方法,它就不能運行了?我感覺沒有用到父類的第一個方法啊! //SubClass sc2 = new SubClass(400); 這個是main的第二句,我注釋了,沒執(zhí)行,所以跟這句沒關(guān)系!求老師或者大師解答下!謝謝……
2 回答

小唯快跑啊
TA貢獻1863條經(jīng)驗 獲得超2個贊
問題在 SubClass(int n);
子類實例實際上是依賴父類存在的,你已經(jīng)有一個重載的構(gòu)造方法了,父類不寫SuperClass()的話,那么父類就沒有SuperClass()這個默認無參構(gòu)造了。
你在調(diào)用子類構(gòu)造方法時的時候不寫super(),虛擬機會默認調(diào)用super()的,這是還找不著父類的無參構(gòu)造方法就會報錯。

一只萌萌小番薯
TA貢獻1795條經(jīng)驗 獲得超7個贊
在一個類的構(gòu)造方法里,必須調(diào)用父類的構(gòu)造方法,如果沒有顯式的調(diào)用,java會自動調(diào)用“默認構(gòu)造方法”,也就是一個沒有任何參數(shù)的構(gòu)造方法,但是SuperClass沒有默認構(gòu)造方法,所以自然報錯
如果將父類所有的構(gòu)造方法去掉,java將會自動生成一個默認構(gòu)造方法,一旦自己寫了任何一個構(gòu)造方法,java就不會再生成
在上面的例子里,如果你把SuperClass的所有構(gòu)造方法去掉,在SubClass的構(gòu)造方法里直接調(diào)用super();就不會報錯
添加回答
舉報
0/150
提交
取消