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

时间:2015-01-12 17:41:34

标签: java

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

public abstract class Font {
  ...
  public abstract Font(int size);
  ...
}

但我的编译器声明:

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

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

3 个答案:

答案 0 :(得分:6)

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

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

public MySpecialSize16Font()
{
    super(16);
}

public ColoredFont(int size, Color color)
{
    super(size);
    this.color = color;
}

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

答案 1 :(得分:0)

如果您在抽象类中实现该构造函数,至少在一个简单的级别(可能没有错误检查),给它保护访问,并使size变量只能通过它设置 - 这将假设size是一个重要的属性,有效地强制执行子类的使用。

答案 2 :(得分:0)

你应该结帐:Can an abstract class have a constructor?

尝试删除abstract @ your构造函数。 它应该是:

public Font(int size);

如果我没有弄错的话应该工作:)