为什么不允许抽象构造函数?

Mic*_*rst 3 java

我正在制作一个抽象Font类,我想强制子类声明一个带有单个int参数(字体大小)的构造函数.我尝试这样做如下.

public abstract class Font {
  ...
  public abstract Font(int size);
  ...
}
Run Code Online (Sandbox Code Playgroud)

但我的编译器声明:

Error:(20, 19) java: <path omitted>/Font.java:20: modifier abstract not allowed here
Run Code Online (Sandbox Code Playgroud)

这不是世界末日 - 这不是绝对必要的,我只是希望Java编译器强迫我记住实现该构造函数.我只是想知道为什么不允许这样做?

Str*_*ior 6

您创建的任何构造函数都必须由实现此抽象类的任何类调用,因此实际上并不需要"提醒"人们实现该构造函数.

扩展类的人可能想要创建自己的构造函数有很多原因.例如:

public MySpecialSize16Font()
{
    super(16);
}
Run Code Online (Sandbox Code Playgroud)

要么

public ColoredFont(int size, Color color)
{
    super(size);
    this.color = color;
}
Run Code Online (Sandbox Code Playgroud)

这不是指定这些类可以提供和不能提供的构造函数的地方.

  • @anthropomorphic:违反开放/封闭原则.只要子类可以为父类提供它需要实例化的所有内容,为什么要关心是否实现了特定的构造函数?他们应该能够创建他们想要的任何构造函数. (2认同)