You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java子类未显式调用super()为何仍执行父类构造方法?

问题:子类构造器未显式调用super()为何仍执行父类构造器?

代码示例

父类A

public class A {
    public A() {
        System.out.println("A");
    }
}

子类B

public class B extends A{
    public B() {
        System.out.println("B");
    }
}

主方法

public static void main(String[] args){
    B b1 = new B();
}

运行输出

A
B

官方文档说明

构造器不是类成员,因此不会被子类继承,但子类可以调用父类的构造器。

我原本认为,除非在B类的构造器中显式调用super(),否则不应输出“A”。想知道为什么实际运行会输出“A”?


解答

这是Java的默认构造器调用规则导致的:

  • 当子类构造器中没有显式调用super()(父类构造器)或者this()(子类其他构造器)时,Java编译器会自动在子类构造器的第一行插入super(),也就是调用父类的无参构造器。
  • 所以实例化B对象时,会先执行父类A的无参构造器(输出"A"),再执行子类B的构造器(输出"B")。
  • 官方文档说构造器不被继承的结论没错——子类并没有继承父类的构造器,只是编译器自动帮你完成了父类构造器的调用动作,确保父类的初始化逻辑能被执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:20:29