Java 如何在扩展类构造函数中调用抽象类的构造函数

Java 如何在扩展类构造函数中调用抽象类的构造函数,java,class,constructor,abstract,extends,Java,Class,Constructor,Abstract,Extends,因此,对于我的家庭作业,我必须创建一个抽象类,它有几个扩展类。我被困在一个地方。在我的课程中,似乎找不到任何地方告诉我如何调用抽象类的构造函数。这是我老师的指示 MyMath's constructor will just call Homework's constructor and again have no arguments. 这是我为抽象构造函数编写的代码: public Homework(){ pagesRead = 0; typeHomework = "none"

因此,对于我的家庭作业,我必须创建一个抽象类,它有几个扩展类。我被困在一个地方。在我的课程中,似乎找不到任何地方告诉我如何调用抽象类的构造函数。这是我老师的指示

MyMath's constructor will just call Homework's constructor and again have no arguments.
这是我为抽象构造函数编写的代码:

public Homework(){
    pagesRead = 0;
    typeHomework = "none";
}
在MyMath课上,我应该在MyMath的构造函数中调用这个构造函数,我不知道该怎么做,我在我们上过的任何其他课程中都找不到它。非常感谢您的帮助:)

如前所述,当您创建子类对象时,将自动调用超级类构造函数。或者,可以通过super()显式调用它。此外,如果您的超类没有默认构造函数,则必须显式地调用它

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

public class MyClass extends Homework
{
  public MyClass()
  {
    super(5);
  }
}
如前所述,当您创建子类对象时,将自动调用超级类构造函数。或者,可以通过super()显式调用它。此外,如果您的超类没有默认构造函数,则必须显式地调用它

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

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

通过调用子类的构造函数,还有其他方法吗?调用子类构造函数将自动调用父类构造函数,即使您没有明确地编写代码,也可以调用子类构造函数中第一行为
super()
的超类构造函数。您可以像调用任何其他超类构造函数一样调用抽象类的构造函数:要么隐式调用(仅当它不需要参数时),要么通过@JackFlamp提到的
super(/*…*/)
,要么显式调用,要么向其传递参数。对于一个抽象类来说,有一个
公共的
构造函数是很奇怪的(与
受保护的
相反),尽管我认为这没有什么区别……通过调用子类的构造函数,还有什么其他的呢?调用子类构造函数将自动调用父类构造函数,即使您没有明确地编写代码,也可以调用子类构造函数中第一行为
super()
的超类构造函数。您可以像调用任何其他超类构造函数一样调用抽象类的构造函数:要么隐式调用(仅当它不需要参数时),要么通过@JackFlamp提到的
super(/*…*/)
,要么显式调用,要么向其传递参数。抽象类有一个
public
构造函数是很奇怪的,尽管(与
protected
相反),但我认为这没有什么区别……”此外,如果你的超类没有默认构造函数,你也必须显式调用它。”不完全一样。如果超类没有零参数构造函数,则必须显式调用它。它不必是默认构造函数,通常也可能不是。(默认构造函数是零参数构造函数,但并非所有零参数构造函数都是默认构造函数——有些是显式提供的。)“此外,如果您的超类没有默认构造函数,则必须显式调用它。”不完全是这样。如果超类没有零参数构造函数,则必须显式调用它。它不必是默认构造函数,通常也可能不是。(默认构造函数是零参数构造函数,但并非所有零参数构造函数都是默认构造函数——有些是显式提供的。)