super()必须写在子类构造方法第一行,用于调用父类构造器;若父类无无参构造器则必须显式调用super(参数);super()与this()不可共存于同一构造方法中。

super() 必须写在子类构造方法的第一行,用于显式调用父类构造方法。不写时编译器会自动插入 super()(无参调用),但一旦父类没有无参构造器,就必须手动写出合适的 super(...) 调用。
调用父类无参构造方法
当父类存在默认或显式定义的无参构造器时,可直接使用 super()。这是最简形式,也常被编译器隐式补全。
- 父类:public class Animal { public Animal() { System.out.println("Animal created"); } }
- 子类:public class Dog extends Animal { public Dog() { super(); System.out.println("Dog created"); } }
调用父类带参构造方法
当父类只有带参数的构造器,或需要传递特定值初始化父类状态时,必须用 super(参数列表) 显式调用。
- 父类:public class Person { private String name; public Person(String name) { this.name = name; } }
- 子类:public class Student extends Person { public Student(String name, int id) { super(name); // 传 name 给父类构造器 } }
与 this() 共存时的调用限制
一个构造方法中不能同时出现 super(...) 和 this(...);二者都必须位于第一行,因此只能选其一。若需链式调用多个构造器,应确保最终某个构造器调用了 super(...)。
- 合法:public Student(String name) { this(name, 0); }
public Student(String name, int id) { super(name); } - 非法:public Student(String name) { super(name); this(name, 0); }(编译错误)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











