Java子类构造方法默认在第一行隐式插入super()调用父类无参构造,前提是父类存在可访问的无参构造;这是编译阶段强制执行的语法规则,不可省略或延迟,若父类无此构造且子类未显式调用super(…)则编译失败。

Java 中子类构造方法会自动在第一行插入 super() 调用父类无参构造方法,前提是父类存在可访问的无参构造。这不是运行时行为,而是编译器强制执行的语法规则。
默认调用发生在编译阶段
只要子类构造方法里没写 super(...) 或 this(...),编译器就会悄悄补上 super(),且它必须是逻辑上的第一条语句。这个动作不可跳过、不可延迟,也不依赖子类构造方法是否有参数。
- 即使子类定义的是
Child(int x),默认仍尝试调用父类的Parent() - 如果父类没有无参构造(比如只写了
Parent(String name)),而子类又没显式写super("xxx"),编译直接失败 - 报错信息典型为:"Implicit super constructor XXX() is undefined"
父类无参构造从哪来?
父类是否拥有可用的无参构造,取决于它自身是否“留了入口”:
- 父类完全没写任何构造方法 → 编译器自动生成一个
public Parent() { } - 父类只要写了任意一个构造方法(哪怕只是
Parent() { }或Parent(int i))→ 编译器不再生成隐式无参构造 - 若父类用了 Lombok(如
@RequiredArgsConstructor),需额外加@NoArgsConstructor才有无参构造
为什么必须调用父类构造?
对象在内存中是分层构建的:先分配并初始化父类部分,再初始化子类部分。子类实例本质上“包含”一个完整的父类子对象,所以父类构造必须先执行。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 调用链是单向且严格的:Object → 父类 → 子类
- 每个构造方法只能有一个父类初始化入口,要么靠隐式
super(),要么靠显式super(…)或this(…) - 不调用父类构造,子类对象就无法完成合法初始化,JVM 不允许这种状态存在
如何验证默认调用确实发生了?
看执行顺序最直观:
class A {
A() { System.out.print("A"); }
}
class B extends A {
B() { System.out.print("B"); }
}
// new B() 输出:AB
输出结果中 A 总是先于 B,说明父类构造体在子类构造体执行前已完成——中间没有你写的代码,但逻辑上就是隐式 super() 在起作用。

















