【发布时间】:2019-05-14 09:59:59
【问题描述】:
假设以下代码。我不明白为什么输出是 B的构造函数被调用 A 的构造函数被调用。
我以为输出只是“调用了 A 的构造函数”,因为构造 A(int t) 不调用构造函数 B?
public class Test {
public static void main(String[] args) {
A a = new A(3);
}
}
class A extends B {
public A(int t) {
System.out.println("A's constructor is invoked");
}
}
class B {
public B() {
System.out.println("B's constructor is invoked");
}
}
【问题讨论】:
-
无代码 -> 没有调用构造函数
-
什么代码?它在哪里? minimal reproducible example
-
@Anna 构造函数所做的第一件事就是调用它的父类的构造函数,无论您是否专门对其进行编码。与专门调用父类构造函数的唯一区别是可以选择调用父类的哪个构造函数
-
@AnnaSaabel 阻止 A 的构造函数调用 B 的构造函数的唯一方法是不允许 A 扩展 B
-
@Anna Saabel 始终记住构造函数的第一行将调用其超类构造函数,即使您不保留它,编译器也会将其保留在
.class文件中。如果您显式保留一个,那么编译器将调用另一个,默认情况下它将调用无参数构造函数。
标签: java oop constructor