super() 怎么调用父类构造方法
在 java 中,子类构造方法通过 super() 关键字显式调用父类的指定构造方法。必须在子类构造方法的第一行使用,且只能出现一次;若省略则编译器自动插入无参的 super()。调用时传入与父类构造方法签名匹配的参数即可。

如何根据参数选择父类构造方法
当父类有多个重载构造方法时,super() 会根据传入参数的类型和数量自动匹配最合适的版本。如果父类没有提供无参构造方法,而子类又未显式调用 super(参数),编译器会报错。

public class Parent {
public Parent() {
System.out.println("Parent no-arg");
}
public Parent(String name) {
System.out.println("Parent with name: " + name);
}
}
public class Child extends Parent {
public Child() {
super(); // 调用 Parent 的无参构造
System.out.println("Child no-arg");
}
public Child(String name) {
super(name); // 调用 Parent 的带 String 参数的构造
System.out.println("Child with name");
}
}
public class Main {
public static void main(String[] args) {
new Child();
new Child("Alice");
}
}运行结果:
立即学习“Java免费学习笔记(深入)”;
Parent no-arg Child no-arg Parent with name: Alice Child with name
如果父类没有无参构造会发生什么
如果父类只定义了有参构造而未定义无参构造,子类必须显式调用 super(参数),否则编译失败。这是最常见的错误场景之一。
public class Parent {
private String id;
public Parent(String id) {
this.id = id;
}
}
public class Child extends Parent {
public Child(String id, String name) {
super(id); // 必须显式调用,否则编译错误
System.out.println("Child created with id: " + id);
}
}
public class Main {
public static void main(String[] args) {
new Child("123", "Bob");
}
}运行结果:
立即学习“Java免费学习笔记(深入)”;
Child created with id: 123


















