super()必须是子类构造方法的第一条语句,用于调用父类构造方法;若未显式调用,编译器自动插入super(),但要求父类有无参构造,否则需显式调用带参super(参数)。

在 Java 中,super() 用于在子类构造方法中显式调用父类的某个构造方法。它必须是子类构造方法中的第一条语句,否则编译报错。
super() 必须放在第一行
Java 规定:如果子类构造方法中要调用 super()(无论有参还是无参),它必须是该构造方法的第一条可执行语句。
- 写在其他语句后面(比如先声明变量、打印日志)会编译失败
- 若没写任何
super(...),编译器会自动插入super()(调用父类无参构造)——前提是父类存在无参构造 - 如果父类没有无参构造,且子类构造中又没显式写
super(参数...),编译直接报错
调用父类带参构造方法
当父类只有带参构造方法时,子类必须用 super(实参...) 显式调用对应签名的构造方法。
例如:
class Parent {
String name;
Parent(String name) {
this.name = name;
}
}
class Child extends Parent {
int age;
Child(String name, int age) {
super(name); // ✅ 正确:调用父类 Parent(String)
this.age = age;
}
}
这里 super(name) 将 name 传给父类构造,完成父类字段初始化。
super() 和 this() 不能共存
一个构造方法里只能出现 super(...) 或 this(...) 中的一个,且都必须是首句。
-
this(...)是调用本类其他构造方法 - 两者互斥:不能既调父类构造,又调本类其他构造
- 如果用了
this(...),那最终那个被调用的构造方法仍需负责调用super(...)(或依赖默认无参调用)
常见错误与检查点
遇到编译错误时,优先检查以下几点:
- 父类是否定义了无参构造?如果没有,子类每个构造方法都得显式写
super(...) - 传给
super(...)的参数类型、个数、顺序是否和父类某构造方法完全匹配? - 是否误把
super(...)写在了第二行或注释之后? - 是否在静态方法或普通方法里误用了
super()?它只允许出现在构造方法中
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











