[英]Why does the subclass in this Java code have a default constructor if the super-class does not have one?
[英]why does the subclass have to invoke the no args constructor in the super class?
在下面的代码上,我知道子类中的super(t)显式调用其父类(类B)中的no-args构造函数。 我似乎难以理解的是,为什么子类必须在超类中调用no-args构造函数? 我似乎无法解决这个目的?
public class Test {
public static void main(String[] args) {
B b = new B(5);
}
}
class A extends B {
public A(int t) {
super(t);
System.out.println("A's constructor is invoked");
}
}
class B {
public B(int k) {
System.out.println("B's constructor is invoked");
}
}
必须先实例化super,然后再将sub之类的sub parent must exists before child
。
我了解子类中的super(t)会在其> superclass(类B)中显式调用no-args构造函数
super(t)
实际上super(5)
将调用public B(int k)
。
super()
尝试调用不存在的public B()
。
注意: 如果类中没有可用的构造函数,则编译器提供no-arg构造函数。
子类中的super(t)显式调用其父类(类B)中的no-args构造函数。
不, super(t)
可以重写为B(t)
。 它正在调用您在代码中显示的构造函数。
我相信你在想什么
如果构造函数未显式调用超类构造函数,则Java编译器会自动将调用插入到超类的无参数构造函数中。
来自http://docs.oracle.com/javase/tutorial/java/IandI/super.html
例如,如果代码未执行super(t)
,则将调用默认的no-args构造函数,但是
如果超类没有无参数的构造函数,则会出现编译时错误
您的B
类没有no-args构造函数(该构造函数将不带参数)。 如果有一个,它将由A
的构造函数自动调用。 但是在示例中,您必须使用super(t)
手动调用它,以指定应使用的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.