抽象类应该至少有一个抽象方法吗?

抽象类是否有必要至少有一个抽象方法?

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

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

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

#1的答案是主观的,是一种风格问题。 我个人会说是的。 如果你的目的是阻止一个类(没有抽象方法)被实例化,那么处理它的最好方法是使用private protected构造函数,而不是将其标记为abstract

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

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

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

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

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

如果一个类在其声明上有一个abstract修饰符,它就变成了abstract类。