You need to enable JavaScript to run this app. 为什么创建子类实例时即便不写super()也会自动调用父类构造方法
优惠活动
大模型
产品
解决方案
定价
更多

为什么创建子类实例时即便不写super()也会自动调用父类构造方法

Java子类实例化自动调用父类无参构造的原因
class SuperDemo{
    public static void main(String[] args) {
        B subClass = new B();
        subClass.showbiz();
    }
}

class A{
    int i;
    A(){
        i = 10;
    }
}

class B extends A{
    
    void showbiz(){
        System.out.println("i in subclass " + i);
    }
}

核心原因

  • Java编译器会在所有子类构造方法的第一行,隐式添加super()语句,作用是调用父类的无参构造方法,该逻辑不需要开发者手动编写代码触发。
  • 继承的底层逻辑要求,子类对象在初始化自有属性之前,必须先完成从父类继承的所有属性、方法的初始化工作,因此父类构造方法的执行优先级永远高于子类构造方法。

你给出的代码中,B类没有显式定义构造方法,编译器会自动为B类生成一个默认的无参空构造,这个空构造的第一行就默认存在隐式的super()调用,执行时会先触发父类A的无参构造给i赋值为10,再完成B类对象的初始化,因此调用subClass.showbiz()时可以正常输出i的值。

补充说明

如果父类没有定义无参构造,仅提供了带参构造,那么子类必须在构造方法第一行显式编写super(对应参数)调用父类的带参构造,否则编译器会报错,因为自动插入的super()找不到匹配的父类无参构造。

内容的提问来源于stack exchange,提问作者KrevoL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:54:05