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);
}
}
SubClass sc1 = new SubClass();调用的是SuperClass(int n)这个构造方法,可以我把 SuperClass()注视掉,为什么程序不能运行啊
------解决方案--------------------
SubClass sc1 = new SubClass();调用的是SuperClass(int n)这个构造方法;确实你这句话没有错。
我把 SuperClass()注视掉;你确定就只把这个默认构造方法注释掉就不能运行了,我刚刚试了一下你的代码,在把默认构造方法注释后是能运行的。因为你调用的是父类的有参构造,不会调用无参构造,所以程序不会报错。是不是你哪里改了代码。或者是描述没有说清楚。
------解决方案--------------------
就是子类的构造方法必须调用父类的构造方法,如果没写,说明调用默认的无参数的构造方法,你看看是不是子类中的构造方法中是不是有调用默认的父类的构造方法?
------解决方案--------------------
将Main方法中的类实例化改成:
SubClass sc1 = TestSuperSub .new SubClass();
这样就可以了,希望可以帮到你
------解决方案--------------------
因为父类已经有了带参构造了,所以你把无参构造注释掉,不会有默认的无参构造,而子类中有无参构造,如果没有用super(),那么就会调用父类的默认无参构造,因为父类已经没有了默认的无参构造,所以会报错。
------解决方案--------------------
SubClass(int n) {
//super();
System.out.println("SubClass(" + n + ")");
this.n = n;
}
这里会先调用父类的默认无参构造,你的父类还有默认的无参构造吗????
------解决方案--------------------
我这电脑上没环境,新手就说说我自己的看法:
有继承那就会默认调用父类的构造函数,如果你把父类的无参构造函数去掉,而子类构造函数中,又没有去调用父类中的有参构造,那当然会出错。。