子类必须显式或隐式调用父类构造方法,且必须是构造方法首行;若父类无无参构造,子类须显式调用super(...),否则编译报错。

子类必须通过 super() 显式或隐式调用父类构造方法,且该调用必须是子类构造方法中的第一条语句。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
必须调用父类构造方法的原因
Java 规定:每个类(包括子类)在实例化时,都必须完成其**整个继承链上所有父类的初始化**。由于父类成员(尤其是 private 字段)通常只能由父类自己的构造方法设置,因此子类不能跳过这一步。如果子类构造方法中没写 super(...),编译器会自动插入无参的 super() —— 但前提是父类存在无参构造方法。
调用方式:显式 vs 隐式
-
隐式调用:子类构造方法第一行没写任何
super(...)或this(...),且父类有默认(无参)构造方法 → 编译器自动补super(); -
显式调用:子类构造方法第一行写
super(参数...);,可匹配父类任意构造方法(包括带参、私有构造方法只要可见) -
不能省略的情况:父类没有无参构造方法,而子类又没显式调用
super(...)→ 编译报错
常见错误与注意事项
-
super(...)必须是子类构造方法的**第一行代码**,否则编译不通过 - 不能在普通方法里调用
super(),它只允许出现在构造方法中 - 不能同时出现
super(...)和this(...)(二者都必须是首行) - 若父类只有带参构造方法,子类每个构造方法都必须显式调用
super(...) - 子类构造方法中未写
super(...)也不满足隐式条件时,编译器不会“猜”怎么调,而是直接报错
一个典型例子
// 父类没有无参构造方法
class Parent {<br>
Parent(String name) { System.out.println("Parent: " + name); }<br>
}// 子类必须显式调用 super("..."),否则编译失败
class Child extends Parent {<br>
Child() {<br>
super("default"); // ✅ 正确:显式调用<br>
}<br>
Child(String s) {<br>
super(s); // ✅ 正确:传参匹配父类构造<br>
}<br>
}

















