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

Java继承疑问:子类未传参时父类为何不能用带参构造器?

原因解析

这是Java编译器的默认构造器生成规则在起作用,核心逻辑分两点:

  • 当类没有显式定义任何构造器时,Java编译器会自动为该类生成一个无参的默认构造器,这个构造器内部只会调用父类的无参构造器(super())。
  • 当类显式定义了任意构造器(不管是带参还是无参),编译器就不会再自动生成无参构造器。

结合你给出的两段代码具体分析:

第一段报错代码

class a{
    a(int age){}
}
class b extends a{}
public class HelloWorld {
    public static void main(String[] args) {
        b var1=new b();
        System.out.println("Try programiz.pro");
    }
}

父类a显式定义了带参构造器,因此编译器不会为它生成无参构造器。子类b没写构造器,编译器会自动为b生成默认构造器,这个默认构造器里会默认调用super()(父类的无参构造器),但父类a根本不存在这个构造器,所以编译报错。添加super(10)后,就是显式调用父类的带参构造器,自然能正常运行。

第二段正常运行代码

class a{}
class b extends a{}
public class HelloWorld {
    public static void main(String[] args) {
        b var1=new b();
        System.out.println("Try programiz.pro");
    }
}

父类a没有显式定义任何构造器,编译器自动为它生成了一个无参构造器a() {}。子类b的默认构造器调用这个父类的无参构造器,所以实例化过程完全正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:10:02