java - 调用了哪个构造函数
问题描述
假设以下代码。我不明白为什么输出是 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");
}
}
解决方案
如果您没有在子类构造函数中调用任何超类构造函数,则默认(无参数)构造函数调用将被隐式添加为子类构造函数中的第一条语句:
class A extends B {
public A(int t) {
super(); // Added by compiler
System.out.println("A's constructor is invoked");
}
}
如果超类没有无参数构造函数(无论是显式定义的还是隐式的),您将收到编译器错误,这意味着您必须显式调用现有的超类构造函数作为子类中的第一条语句构造函数。
隐式超级构造函数 B() 未定义。必须显式调用另一个构造函数
如果类没有显式定义的构造函数,则编译器会将隐式无参数构造函数添加到类中。
推荐阅读
- c# - 字段初始值设定项无法引用非静态字段、方法或属性“SignalServer.connectionString”(CS0236)
- flutter - Flutter:如何在 N 秒间隔后停止计时器?
- r - 如何绘制站点指数曲线族?
- python - 取 STR 的每个元素的值,直到达到 #
- ruby - JSON 解析 Redis.get 返回
- matplotlib - 制作RGB值的散点图python matplotlib的颜色
- c - 如何打开磁盘以写入 Windows 中的最后一个扇区?
- python - 尽管迁移已成功完成,但 Admin 或 Api 没有变化
- ios - iOS Stackview Tap Buttons在彼此之上
- download - 如何使用 micronaunt HttpClient 从 Web 服务获取字节 [](图像)