super()必须作为子类构造器的第一条语句显式调用父类构造器;若未写,编译器自动插入super()调用父类无参构造器;父类无无参构造器时须显式super(参数);super()非方法调用,不可赋值、不可置于条件或循环中。

在 Java 中,super() 用于在子类构造器中显式调用父类的构造器,且必须是子类构造器的第一条语句。
super() 必须放在第一行
Java 规定:如果子类构造器中要调用父类构造器(无论有参还是无参),super(...) 必须作为该构造器的第一条可执行语句。否则编译报错。
- 没写任何 super() 或 this() 时,编译器会自动插入 super()(调用父类无参构造器)
- 如果父类没有无参构造器,而子类又没显式写 super(...),就会编译失败
- 不能同时出现 super(...) 和 this(...)
调用父类有参构造器
当父类只提供带参数的构造器时,子类必须用 super(参数) 显式调用,把必要参数传给父类初始化逻辑。
例如:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
class Animal {String name;
Animal(String name) { this.name = name; }
}
class Dog extends Animal {
int age;
Dog(String name, int age) {
super(name); // 必须写,且第一行
this.age = age;
}
}
注意:super() 不是方法调用
super(...) 看似像方法,但它不是普通方法调用,而是构造器委托机制的一部分。它不返回值,也不能赋值、不能写在条件分支或循环里,只能出现在构造器开头。
- 不能写成 Animal a = super("Tom");
- 不能写在 if 块内或 try 块中
- 不能和 return 混用(因为它是构造器的起始动作)
常见错误与解决
典型编译错误:"Implicit super constructor XXX() is undefined"
- 原因:父类没写无参构造器,子类又没写 super(...)
- 解决:要么在父类加一个无参构造器,要么在子类构造器首行补上 super(对应参数)
- 若父类构造器是 private,子类无法继承并调用,此时不能直接 extends,需考虑组合或其他设计

















