【问题标题】:How would I call a constructor of an abstract class inside of an extending class constructor如何在扩展类构造函数中调用抽象类的构造函数
【发布时间】:2018-09-26 01:47:13
【问题描述】:

所以对于我的作业,我必须创建一个包含一些扩展类的抽象类。我被困在一个部分。在我的课程中,我似乎找不到任何地方告诉我如何调用抽象类的构造函数。这是我老师的指示。

MyMath's constructor will just call Homework's constructor and again have no arguments.

这是我的抽象构造函数代码:

public Homework(){
    pagesRead = 0;
    typeHomework = "none";
}

在 MyMath 类中,我应该在 MyMath 的构造函数中调用这个构造函数,但我不知道该怎么做,而且在我们上过的任何其他课程中都找不到它。任何帮助表示赞赏:)

【问题讨论】:

  • 通过调用子类的构造函数,还能怎样?调用子构造函数会自动调用父构造函数,即使你没有显式编写代码
  • 你调用一个超类构造函数,super() 作为你的子类构造函数的第一行。 docs.oracle.com/javase/tutorial/java/IandI/super.html
  • 您调用抽象类的构造函数,就像调用任何其他超类构造函数一样:隐式调用(仅当它不需要参数时),或者通过@JackFlamp 提到的super(/*...*/),或者显式调用或将参数传递给它。奇怪的是抽象类有一个 public 构造函数,虽然(与 protected 相反),但我认为它没有任何区别......

标签: java class constructor abstract extends


【解决方案1】:

正如Stultuske 已经说过的,超类构造函数会在您创建子类对象时自动调用。或者,您可以通过 super() 显式调用它。此外,如果你的超类没有默认构造函数,你也必须显式调用它。

public abstract class Homework
{
  public Homework(int i)
  {
    ...
  }
}

public class MyClass extends Homework
{
  public MyClass()
  {
    super(5);
  }
}

【讨论】:

  • “此外,如果你的超类没有默认构造函数,你也必须显式调用它。” 不完全是。如果超类没有 zero-parameters 构造函数,则必须显式调用它。它不必是默认构造函数,而且通常可能不是。 (默认构造函数是零参数构造函数,但并非所有零参数构造函数都是默认构造函数——有些是显式提供的。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2014-08-09
  • 2014-05-29
  • 2014-04-18
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多