【发布时间】:2021-06-18 16:42:43
【问题描述】:
我并没有真正在任何地方使用super(),但仍然调用了超类的构造函数。为什么会这样?
class SuperDemo{
public static void main(String[] args) {
B subClass = new B();
subClass.showbiz();
}
}
class A{
int i;
A(){
i = 10;
}
}
class B extends A{
void showbiz(){
System.out.println("i in subclass " + i);
}
}
【问题讨论】:
-
这是语言的一部分。如果您不显式调用
super,编译器将调用无参数版本。总是。 -
这是隐含的。它必须被调用。为方便起见,编译器允许您不显式调用它,但无论您是否编写它都会调用它。
-
如果你有
A的子类,那么该子类的实例是A的实例,所以它们必须按照A来构造' s 规则(可能加上子类强加的一些附加规则)。在不调用构造函数的情况下构造A的实例是没有意义的。如果您发现自己处于有意义的情况下,那么您不应该在这种情况下使用继承。
标签: java inheritance super