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

Java中调用父类带参构造器报错,求问题排查与解决

子类调用父类带参构造器报错的排查与解决

嘿,我来帮你捋清楚这段代码里的问题:

错误原因分析

  • 缺失继承关系:你的SS类没有显式继承SC类!Java里如果不写extends关键字,所有类默认继承Object类,而Object只有一个无参构造方法。当你在SS的无参构造里写super(10)时,想调用父类的带参构造,但Object根本没有这个构造器,这就是编译报错的核心原因。
  • 额外逻辑提醒:就算继承关系正确,你要注意SS的有参构造里调用了this()(自身无参构造),而无参构造里已经调用了super(10),这部分语法是合规的(super/this必须是构造器第一条语句),但前提是父类确实存在对应的带参构造。

解决方法

步骤1:补全继承关系

给SS类加上extends SC,让它明确继承SC类,这样super(10)就能找到SC里的带参构造器了。

步骤2:可选调整构造器调用逻辑

如果你希望SS的有参构造直接调用SC的带参构造,而不是先触发自身无参构造,也可以修改SS的有参构造:
把this()换成super(x),这样就能直接传递参数给父类的带参构造。

修正后的完整代码

class SC {
    SC() {
        System.out.println("SC.......DC");
    }
    SC(int x) {
        System.out.println("SC........PC");
    }
}

class SS extends SC {
    SS() {
        super(10);
        System.out.println("SS.......DC");
    }
    SS(int x) {
        this(); // 保持原逻辑,调用自身无参构造
        System.out.println("SS........PC");
    }
}

public class OpConstructor {
    public static void main(String[] args) {
        SS do1=new SS(10);
    }
}

运行这段代码后,输出结果会是:

SC........PC
SS.......DC
SS........PC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:05:20