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

如何在继承抽象类的子类构造方法中调用抽象类构造方法?

如何在子类构造方法中调用抽象类的无参构造方法?

别慌,这个问题在Java里其实非常直观,咱们直接看怎么实现:

首先要记住一个Java的默认规则:当你实例化子类对象时,Java会自动先调用父类的无参构造方法——哪怕你不在子类构造里写任何相关代码。不过既然老师要求你显式写出调用逻辑,那只需要用super()关键字就可以了。

完整代码示例

先看你的抽象类Homework的实现(我补全了必要的成员变量和抽象方法,方便你参考):

public abstract class Homework {
    protected int pagesRead;
    protected String typeHomework;

    // 你已经写好的无参构造
    public Homework() {
        pagesRead = 0;
        typeHomework = "none";
    }

    // 抽象类必须包含至少一个抽象方法(根据作业要求)
    public abstract void createAssignment(int pages);
}

然后是MyMath子类的无参构造写法,完全符合老师的要求:

public class MyMath extends Homework {
    // 子类的无参构造
    public MyMath() {
        // 显式调用父类Homework的无参构造方法
        super();
        // 如果MyMath有自己的初始化逻辑,比如设置专属属性,都可以写在这里
    }

    // 必须实现父类的抽象方法
    @Override
    public void createAssignment(int pages) {
        pagesRead = pages;
        typeHomework = "Math";
    }
}

额外说明

  • 如果你省略super()这行代码,Java编译器会自动在子类构造的第一行插入它,所以两种写法的运行效果完全一致。但既然老师明确要求你调用父类无参构造,显式写出super()就是最规范的做法。
  • 只有当父类没有无参构造(比如只有带参构造)时,你才必须显式调用父类的带参构造;但你的Homework已经有无参构造,所以完全不需要担心这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:58