mat*_*t b 15

这篇文章的主题和正文提出了两个不同的问题:

  1. 它应该至少有一个抽象成员吗?
  2. 是否有必要至少有一个抽象成员?

#2的答案肯定是否定的.

#1的答案是主观的,是一种风格问题.我个人会说是的.如果你的目的是防止一个类(没有抽象方法)被实例化,处理它的最好方法是使用构造函数,而不是通过标记它.privateprotectedabstract

  • @matt b,受保护的构造函数不会给出完全相同的限制.例如,同一个包中的类可以实例化它.但我同意差异很小,对大多数项目来说并不重要. (2认同)

Bal*_*usC 14

不,没有必要.您经常会在"模板方法"设计模式中看到这种情况,例如HttpServlet,每个方法已经定义了默认行为,您可以自由地覆盖它们中的一个(或多个)而不是全部.


Tom*_*ine 10

在JDK 1.0中,确实需要在抽象类中至少有一个抽象方法.在JDK 1.1(1997?(我很老))中删除了这个限制,并将这些类添加到Java库中,例如java.awt.event.KeyAdapter.

在C++中,您需要至少一个纯虚函数来创建必需的子类,并且至少需要一个虚函数来将RTTI添加到类中.通常,使用析构函数是有意义的.

注意,当重写非抽象方法时,使用@Override是个好主意.它不仅告诉读者有关代码尝试执行操作的重要信息,还会发现拼写错误或不正确的参数类型阻止覆盖的常见错误.


the*_*oop 6

不 - 你可以在没有任何抽象方法的情况下声明一个类摘要.对于该类的实例存在概念上可能没有任何意义,或者您可能希望确保只能实例化该类的子类(无论出于何种原因)

  • +1这回答了最"重点"和简洁的答案.谢谢! (3认同)