java继承中构造方法执行顺序是先父类后子类:jvm强制沿继承链自顶向下初始化,先调用object构造,再逐层执行各父类构造,最后执行子类构造;字段初始化在super()之后、构造体之前完成。

Java 中继承关系下构造方法的执行顺序是:先执行父类构造方法,再执行子类构造方法。这个顺序由 JVM 强制保证,且无论子类构造方法中是否显式调用 super(),父类无参构造方法都会被调用(前提是父类有默认或显式定义的无参构造)。
父类构造方法总是最先执行
创建子类对象时,JVM 会沿着继承链从上到下逐层初始化父类,直到 Object 类。即使子类构造方法第一行没写 super(...),编译器也会自动插入 super()(调用父类无参构造)。如果父类没有无参构造,而子类又没显式调用 super(参数),编译直接报错。
- Object 是所有类的顶层父类,它的无参构造总存在,所以继承链终点一定可达
- 若父类只定义了带参构造,子类必须在第一行用
super(x, y)显式调用,否则编译失败 -
this(...)和super(...)不能共存于同一个构造方法中,且都必须是第一行语句
执行顺序严格遵循“自顶向下、先父后子”
不是按代码书写顺序,而是按类的继承层级顺序。例如 A ← B ← C(C 继承 B,B 继承 A),那么 new C() 时依次执行:
A 的构造方法 → B 的构造方法 → C 的构造方法。
- 每层构造方法内部的普通语句(如字段赋值、打印日志)在其所属构造方法被调用时才执行
- 字段初始化(包括实例变量赋值和实例初始化块)会在对应类的构造方法体执行前完成,但仍在
super()调用之后(即父类构造执行完、子类构造开始前) - 静态初始化块和静态变量赋值只在类首次加载时执行一次,与构造顺序无关
常见误区提醒
容易误以为“子类构造方法里写了 super 就是从那里开始执行”,其实 super 调用只是触发父类构造的入口,真正的执行流是跳转到父类构造,等它完整跑完,再回到子类继续往下。
- 构造方法不支持多态:父类构造中调用的方法,即使被子类重写,运行时仍调用父类版本(因为此时子类对象尚未初始化完成)
- 不要在父类构造中调用可能被子类重写的方法,否则可能访问到未初始化的子类字段,导致 unexpected null 或 0
- 如果想控制初始化逻辑,优先考虑使用 final 方法、私有方法,或把可变行为延迟到构造完成后的 init() 方法中
理解这个顺序对排查对象初始化异常、设计安全的继承结构非常关键。只要记住“先建好爹,再建儿子”,就抓住了本质。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











