java子类构造器必须显式或隐式调用父类构造器,super()须为首句且与this()互斥;若父类无无参构造器,子类必须显式调用super(…);super()仅初始化当前对象的父类部分,不创建新对象。

在 Java 中,子类构造器必须显式或隐式调用父类构造器,这是对象初始化的强制规则。如果不写任何调用语句,编译器会自动插入 super()(即无参父类构造器),但前提是父类存在无参构造器;否则必须手动调用。
子类构造器中用 super() 显式调用父类构造器
这是最常见、最明确的方式。super(...) 必须是子类构造器的第一条语句。
- 调用父类无参构造器:
super(); - 调用父类带参构造器:
super("hello", 123);,参数类型和顺序需与父类构造器匹配 - 如果父类没有无参构造器,且子类构造器没写
super(...),编译直接报错
父类没有无参构造器时必须显式调用
例如父类只定义了 public Parent(String name) { ... },那么子类不能依赖默认 super():
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 错误写法(编译失败):
class Child extends Parent { Child() { } } - 正确写法:
class Child extends Parent { Child() { super("default"); } }
不能同时调用 super() 和 this()
一个构造器里只能有一个“构造器调用”,且必须是首行:
-
super(...)和this(...)互斥,不能共存 - 如果用了
this(...)(调用本类其他构造器),那最终那个被调用的构造器仍需负责调用super(...) - 例如:本类构造器 A → 调用本类构造器 B → B 中必须有
super(...)
注意:super() 不是创建父类对象,只是初始化当前对象的父类部分
Java 中只有一个对象实例(就是 new 出来的那个),super() 的作用是确保该对象从顶层父类开始逐级完成字段初始化和构造逻辑:
- 不是“先 new 父类,再 new 子类”
- 而是:分配内存 → 调用 Object 构造器 → 调用父类构造器 → 调用子类构造器
- 整个过程构建的是同一个对象,只是按继承链顺序初始化各层成员
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










