如下显示,关于 Super关键字,继承的问题!求详细解答?

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);
}
}

在执行main的第一句 SubClass sc1 = new SubClass();时,应该调用的是
SubClass() {
super(300);
System.out.println("SubClass()");
}
这个构造方法,此方法内有个super(300);应该调用的是父类的重载的第二个方法
SuperClass(int n) {
System.out.println("SuperClass(" + n + ")");
this.n = n;

为什么,我注释了 父类的第一个方法,它就不能运行了?我感觉没有用到父类的第一个方法啊! //SubClass sc2 = new SubClass(400); 这个是main的第二句,我注释了,没执行,所以跟这句没关系!求老师或者大师解答下!谢谢……

守着星空守着你
浏览 131回答 2
2回答

小唯快跑啊

问题在 SubClass(int n);子类实例实际上是依赖父类存在的,你已经有一个重载的构造方法了,父类不写SuperClass()的话,那么父类就没有SuperClass()这个默认无参构造了。你在调用子类构造方法时的时候不写super(),虚拟机会默认调用super()的,这是还找不着父类的无参构造方法就会报错。

一只萌萌小番薯

在一个类的构造方法里,必须调用父类的构造方法,如果没有显式的调用,java会自动调用“默认构造方法”,也就是一个没有任何参数的构造方法,但是SuperClass没有默认构造方法,所以自然报错如果将父类所有的构造方法去掉,java将会自动生成一个默认构造方法,一旦自己写了任何一个构造方法,java就不会再生成在上面的例子里,如果你把SuperClass的所有构造方法去掉,在SubClass的构造方法里直接调用super();就不会报错
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java