子类构造方法必须首行调用super()或this(),且二者互斥;若未显式调用super(),编译器自动插入super(),但要求父类存在无参构造器,否则需显式匹配父类带参构造器签名。

子类构造方法必须通过 super() 调用父类构造方法,且该调用必须是构造方法中的第一行可执行语句。
必须写在第一行
Java 强制要求:super() 或 super(参数) 必须紧接在构造方法左大括号后,前面不能有任何代码(包括变量声明、打印语句、注释也不行)。
- ✅ 正确:
public Child() { super(); ... } - ❌ 错误:
public Child() { System.out.println("hi"); super(); ... }→ 编译失败
不写 super() 时会发生什么
如果子类构造方法里没写 super(),编译器会自动插入 super();(无参调用),但前提是父类存在无参构造器。
- 父类有无参构造器 → 子类可省略 super(),编译通过
- 父类只有带参构造器(如
Parent(String name))→ 子类必须显式写super("xxx"),否则报错:“Implicit super constructor Parent() is undefined”
根据父类构造器签名匹配调用
super() 的参数必须与父类某个构造器的形参类型、个数、顺序完全一致。
- 父类定义:
public Animal(String name, int age) - 子类中可写:
super("Lucky", 5);✅ - 不可写:
super("Lucky");(参数不足)或super(5, "Lucky");(顺序错误)❌
super() 和 this() 不能共存
一个构造方法里只能出现 super() 或 this() 中的一个,且都必须在首行。
-
this(...)是调用本类其他构造器,它内部最终也必须以 super() 结尾,确保父类被初始化 - 二者互斥,因为都需要抢占“构造链起点”的位置

















