java 中子类对象创建时,父类构造方法会先于子类构造方法执行。具体做法是:在子类构造函数的第一行,编译器会自动插入 super() 调用以执行父类的无参构造函数;如果父类没有无参构造函数,则必须在子类构造函数第一行显式使用 super(参数) 指定要调用的父类构造函数。

默认情况下父类无参构造如何被调用
当子类构造函数没有显式调用 super() 且父类存在无参构造函数时,编译器会在子类构造函数的首行自动添加 super() 调用。这确保了父类的初始化逻辑在子类实例化之前完成。

public class Parent {
public Parent() {
System.out.println("Parent Constructor");
}
}
public class Child extends Parent {
public Child() {
// 编译器自动在此处插入 super();
System.out.println("Child Constructor");
}
}
public class Main {
public static void main(String[] args) {
new Child();
}
}
运行上述代码将输出:
Parent Constructor
Child Constructor
父类无无参构造时子类如何指定父类构造
如果父类只定义了带参数的构造函数而没有无参构造函数,子类必须在其构造函数中使用 super(参数) 显式调用父类的特定构造函数,否则编译会报错。

public class Parent {
private String name;
public Parent(String name) {
this.name = name;
System.out.println("Parent Constructor with name: " + name);
}
}
public class Child extends Parent {
public Child() {
super("DefaultName"); // 必须显式调用父类有参构造
System.out.println("Child Constructor");
}
}
public class Main {
public static void main(String[] args) {
new Child();
}
}
运行上述代码将输出:
Parent Constructor with name: DefaultName
Child Constructor
基于程序中某个输入、条件或结果的具体问题
在上述示例中,当子类 Child 的构造函数执行时,父类 Parent 的构造函数总是优先执行。这是 Java 语言规范强制规定的,目的是确保父类状态在子类使用前已正确初始化。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











