super()用于显式调用父类构造方法,必须位于子类构造方法第一行;若未显式调用,编译器自动插入super(),此时要求父类存在无参构造,否则编译失败。

在 Java 中,super() 用于显式调用父类的构造方法,必须写在子类构造方法的第一行,否则编译器会自动插入无参的 super()。如果父类没有无参构造方法,又没手动写 super(...),就会编译失败。
super() 必须放在第一行
Java 规定:子类构造方法中,对父类构造方法的调用(super 或 this)必须是第一条可执行语句。
- 写在第二行或后面 → 编译错误
- 和 this()(调用本类其他构造)互斥,二者不能共存
调用不同参数的父类构造方法
根据父类构造方法的签名,传入对应参数即可。例如:
// 父类
class Animal {<br>
Animal(String name) {<br>
System.out.println("Animal 构造:" + name);<br>
}<br>
}
// 子类
class Dog extends Animal {<br>
Dog(String name, int age) {<br>
super(name); // ✅ 正确:调用父类含参构造<br>
System.out.println("Dog 构造,age=" + age);<br>
}<br>
}
不写 super() 时的默认行为
如果子类构造方法第一行既没写 super(...),也没写 this(...),编译器会自动补上 super()(即调用父类无参构造)。
- 父类有无参构造 → 正常编译
- 父类只有含参构造,且没手动写 super(...) → 编译报错:“Constructor Animal() is undefined”
常见错误与提醒
- 不能在普通方法(如 public void run())里写 super() —— 只能在构造方法中用
- super() 是调用构造方法,不是创建新对象;对象只创建一次,但初始化流程会沿继承链向上执行
- 如果父类构造抛出异常,子类构造也需声明或捕获相同异常
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











