在Java中,子类构造方法必须通过super()调用父类构造器,且super()必须位于第一行;若父类无无参构造器,必须显式调用匹配的带参super(...);未写super()时编译器自动插入super(),但要求父类存在无参构造器;super()与this()不可共存。

在 Java 中,子类构造方法中通过 super() 调用父类构造器,是初始化继承关系的必要步骤。只要父类没有无参构造器,或者你想显式调用某个带参构造器,就必须在子类构造方法的第一行写上对应的 super(...)。
必须放在第一行
super()(或 this())调用必须是子类构造方法中的第一条语句,否则编译报错。
- 编译器不允许在它前面加任何代码(包括变量声明、打印语句等)
- 如果没写
super(...),且父类没有无参构造器,编译直接失败
调用父类对应参数的构造器
根据父类提供的构造器签名,传入匹配的参数。例如:
父类定义:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
立即学习“Java免费学习笔记(深入)”;
class Animal {Animal(String name) {
System.out.println("Animal created: " + name);
}
}
子类正确写法:
class Dog extends Animal {Dog(String name, String breed) {
super(name); // 必须调用父类含 String 参数的构造器
System.out.println("Dog breed: " + breed);
}
}
不写 super() 的默认行为
如果子类构造方法中没写 super(...),编译器会自动插入 super(); —— 即调用父类的无参构造器。
- 前提是父类存在无参构造器(显式写出,或编译器自动生成)
- 如果父类只定义了带参构造器,又没写无参构造器,此时子类不写
super(...)就会编译失败
不能同时出现 super() 和 this()
一个构造方法里只能有一个构造器调用:要么是 super(...),要么是 this(...)(调用本类其他构造器),二者不可共存。
- 因为两者都必须是第一行,逻辑上冲突
- 如果要用
this(...),那最终被调用的那个构造方法里,仍需负责调用super(...)

















