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
相关产品推荐
相关产品推荐

