子类构造方法中调用父类构造器必须用super()且位于第一行;未显式调用时编译器自动插入super(),但要求父类有无参构造器;super()与this()互斥且均须首行。

子类在继承父类后,若需调用父类构造方法,必须通过 super() 在自身构造方法的第一行显式调用 —— 这是 Java 的强制规则,否则编译不通过。
super() 必须放在构造方法第一行
Java 规定:如果子类构造方法中要调用父类构造器,super() 必须是该构造方法中的第一条可执行语句。哪怕只有一行注释或空行在它前面,也会报错。
- 正确写法:super(); 或 super(参数); 紧跟在构造方法左大括号后
- 错误写法:先声明变量、调用方法、甚至加个 System.out.println(),再写 super() —— 编译直接失败
不写 super() 时的默认行为
如果子类构造方法里没写任何 super(...),Java 编译器会自动插入 super();(即无参调用)。但前提是父类必须有无参构造器。
- 父类有无参构造 → 子类不写 super 也能编译通过
- 父类只有带参构造(比如 public Parent(String name))→ 子类必须显式写 super("xxx"),否则编译报错:“Implicit super constructor Parent() is undefined”
调用父类不同参数的构造器
根据父类提供的构造方法签名,子类可用 super(对应参数) 调用指定版本。参数类型、个数、顺序必须严格匹配。
- 父类定义:public Animal(String name, int age)
- 子类中可写:super("Tom", 3); —— 正确
- 不能写:super("Tom");(少一个参数)或 super(3, "Tom");(顺序错)
super() 和 this() 不能共存
一个构造方法里只能出现 super(...) 或 this(...) 中的一个,且都必须在第一行。二者互斥,因为都需要抢占“首行位置”来完成对象初始化链条。
- this(...) 是调用本类其他构造器,本质仍是构造过程的委托
- 一旦用了 this(...),它内部最终也必须以 super(...) 结尾,确保父类被初始化
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











