如何在继承抽象类的子类构造方法中调用抽象类构造方法?
如何在子类构造方法中调用抽象类的无参构造方法?
别慌,这个问题在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
相关产品推荐
相关产品推荐

