抽象类构造方法在子类实例化时强制执行,用于初始化父类字段和资源;若无显式无参构造,子类须显式调用super(参数);执行顺序为父类初始化块→父类构造体→子类初始化块→子类构造体。

抽象类的构造方法不会被直接调用,但会在子类实例化时自动参与初始化流程——它不是可选环节,而是Java对象构建机制中强制执行的一环。
子类构造器第一行隐式或显式触发super()
当执行 new SubClass() 时,JVM要求子类构造器必须先完成父类(含抽象类)的初始化。编译器会自动在子类构造器首行插入 super(),前提是抽象类存在无参构造方法;否则必须显式写出 super(参数),且必须放在第一行。
- 若抽象类只定义了带参构造(如
Animal(String name)),子类构造器不写super(name)就会编译失败 - 若抽象类未定义任何构造方法,编译器提供默认无参构造,子类可省略
super() - 若抽象类显式定义了无参构造,也定义了有参构造,子类仍可选择调用任一版本
执行顺序严格遵循“先父后子”
抽象类构造方法的执行发生在子类字段赋值和子类构造体运行之前,属于父类初始化链的一部分:
- 内存分配 → 所有字段设为默认值(
null、0、false) - 执行父类(抽象类)实例初始化块(
{...}) - 调用父类构造方法体(即你写的
public Animal(String name)内容) - 返回后,才执行子类自己的初始化块和构造器体
构造方法里能做的事和普通类完全一样
抽象类构造方法不是摆设,它承担真实职责:
立即学习“Java免费学习笔记(深入)”;
- 给
protected或private字段赋初值(如this.name = name) - 做参数校验(如
Objects.requireNonNull(name)) - 记录日志、预加载配置、注册监听器等公共初始化逻辑
- 甚至可调用抽象方法(此时会执行子类实现,但子类字段尚未初始化,属危险操作)
不能实例化 ≠ 不需要初始化
抽象类虽不可 new,但它定义的字段、资源、状态都需要被正确建立——这些都依赖构造方法。子类继承时,本质上是“复用父类结构+补充自身行为”,而父类结构的准备,就靠这个构造方法完成。


















