繁体   English   中英

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

[英]Should a base class be marked abstract if there are no abstract members?

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

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

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

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

简短回答:是的。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM