Java子类构造器必须显式或隐式调用父类构造器,且super()必须为首行语句;若父类无无参构造器,则需显式匹配带参构造器;super与this不可共存。

Java 中子类构造方法必须显式或隐式调用父类构造器,否则编译不通过。如果子类构造器中没写 super(...),编译器会自动插入无参的 super() —— 但前提是父类有无参构造器;否则必须手动写 super(参数) 来匹配父类存在的某个构造器。
必须放在第一行
super(...) 调用必须是子类构造方法中的第一条语句,否则编译报错。这是因为对象初始化需先完成父类部分,再执行子类逻辑。
- ✅ 正确:super(name, age); 在首行
- ❌ 错误:System.out.println("before"); super(name, age);(非首行)
- ❌ 错误:this(); super(...);(不能同时出现
this和super)
匹配父类存在的构造器
传给 super(...) 的参数类型、个数、顺序,必须和父类中某个构造器签名完全一致。若父类只有带参构造器(比如 Person(String name)),而你写 super(),就会编译失败。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 父类定义:
public Person(String name) { ... } - 子类中必须写:
super("Alice");或super(name); - 不能只写:
super();(找不到匹配的无参构造器)
不写 super() 时的默认行为
如果子类构造器开头既没写 super(...) 也没写 this(...),编译器会自动补上 super()。这要求父类必须提供一个可访问的无参构造器(public / protected / default,且未被覆盖为私有)。
立即学习“Java免费学习笔记(深入)”;
- 父类有默认无参构造器 → 子类可省略
super() - 父类删掉了无参构造器,只留
Person(int id)→ 子类必须显式写super(123); - 父类无参构造器是
private Person() {}→ 子类无法访问,必须显式调用其他可访问的构造器
不能和 this() 共存
一个构造器里只能有一个“构造器调用”,要么是 super(...),要么是 this(...)(调用本类其他构造器),二者不可并存,也不能出现多次。
- ✅
this("default");→ 然后该构造器里不能再有super(...) - ✅
super(name);→ 该行之后才能写其他代码 - ❌
super(); this();(编译错误)

















