抽象类中的构造函数?

dev*_*per 19 java

为什么抽象类有构造函数?由于我们无法创建它的对象,为什么我们需要抽象类中的构造函数?

Las*_*olt 36

在某些情况下,我们需要初始化抽象类中的字段.如果它是一个空构造函数,则由子类中的构造函数隐式完成,否则我们使用super(parameters).带参数的构造函数强制子类指定一些参数(不一定来自它自己的参数).

总而言之,这意味着构造函数由子类构造函数使用,而不是来自"外部".


mar*_*igo 26

通过向抽象类添加构造函数,可以强制子类调用super来初始化某些字段.例:


abstract class Person {
   private String name;
   public Person(String name) {
      this.name = name;
   }
}

class SoccerPlayer extends Person {
   public SoccerPlayer(String name) {
     super(name);
   }
}
Person p = new SoccerPlayer("Ronaldo");

  • +1为清晰的例子 (3认同)

Pet*_*rey 8

您仍然需要能够创建一个必须调用其父级构造函数及其父级等的子类.

真正的问题是为什么你可以将一个抽象类构造函数公开.;)