Java子类构造器必须显式或隐式调用父类构造器,super()或this()须为第一条语句且互斥;若父类无无参构造器,子类须显式调用super(…);参数需匹配父类构造器签名,且不可在super中访问this或实例方法。

子类构造方法必须显式或隐式调用父类构造器,这是 Java 的强制规则。如果不写调用语句,编译器会自动插入 super()(无参调用),前提是父类有无参构造器;否则编译失败。
必须放在第一行
调用父类构造器的 super(...) 或 this(...) 语句,必须是构造方法中的第一条可执行语句。
- 如果写了
super(123),它必须在最前面,前面不能有任何变量声明、打印、计算等操作 - 不能同时出现
super(...)和this(...),二者互斥 - 若父类没有无参构造器,而子类构造器又没显式调用
super(...),编译直接报错
隐式调用只适用于父类有无参构造器
当子类构造器中没写任何 super 或 this 调用时,编译器自动补上 super()。但这要求父类至少有一个无参构造器。
- 父类只定义了
Parent(int x),没写无参构造器 → 子类不写super(x)就会编译失败 - 父类没定义任何构造器 → 编译器默认提供无参构造器,此时子类可省略
super() - 为避免意外,建议显式写出
super(...),尤其在继承链较深时更清晰
通过 super 传递参数给父类构造器
子类常需把部分参数传给父类做初始化,用 super(param1, param2) 即可完成委托。
立即学习“Java免费学习笔记(深入)”;
- 参数类型和数量必须严格匹配父类某个构造器签名
- 可以在调用前对参数做简单处理,比如
super(name.toUpperCase(), age + 1) - 不能在
super(...)中调用实例方法或访问this,因为此时对象尚未完成构建
与 this() 调用的区别
this(...) 是调用本类其他构造器,也必须放第一行,且和 super(...) 不能共存。本质是构造器重载的内部跳转。
-
this("default")→ 调用本类带 String 参数的构造器 - 该构造器内部仍需满足调用父类构造器的要求(显式或隐式)
- 最终链条上,总有一个构造器要负责调用
super(...)完成父类初始化


















