如果没有抽象成员,基类应该标记为抽象吗?

如果一个类没有抽象成员,那么它是否可以被标记为抽象? 即使没有直接实例化的实际理由呢? (除了unit testing)

是的,即使在没有抽象方法的情况下,明确标记为不应该实例化的基类也是合理和有益的。

  • 它强制执行通用指南,使非叶类抽象化。
  • 它可以防止其他程序员创建该类的实例。 这可能会使您以后更容易添加抽象方法。

你想让那个class级有一个实际的实例吗? 如果是,那么不要将其标记为摘要。 如果不是,则将其标记为摘要。

简短回答:是的。

答案很长: abstract关键字将类和/或其成员标记为不直接有用。 为什么这可能因情况而异; 抽象类可能过于基本而无法进行任何实际工作,或者它可能具有为此类中的其他代码存在而需要存在的抽象成员,但不能在此级别具体定义。 缺点是,通过标记类抽象,您告诉编译器和其他开发人员不要直接实例化此类,而是inheritance它以创建具体有用的实现。 即使类具有所有成员的工作实现,如果您认为必须inheritance该类以充分利用该实现,您也可以这样做。

如果目标是创建一个其他类将扩展的基类,那么将它作为一个抽象类是有意义的。

但是,如果目标是创建某种forms的Utility类 – 一个只有static成员的类 – 处理它的最好方法是给类一个标记为private构造函数。 这样,该类无法实例化,也无法进行子类化。 这发出一个明确的信号,即该类的唯一用途是使用其static方法。 (这是来自Effective Java的提示,作者Josh Bloch)

是的,我想是这样。 至少那是我不时做的事情;-)