我正在创建一个抽象的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编译器强迫我记住实现该构造函数。我只是想知道为什么不允许这样做?
答案 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);
如果我没有弄错的话应该工作:)