抽象类是否必须至少有一个抽象方法?
5 回答
这篇文章的主题和正文提出了两个不同的问题:
- 它应该至少有一个抽象成员吗?
- 是否必须至少有一个抽象成员?
#2的答案肯定是否定的。
#1 的答案是主观的和风格问题。我个人会说是的。如果您的意图是防止类(没有抽象方法)被实例化,那么处理这个问题的最佳方法是使用构造函数,而不是标记它。private
protected
abstract
不,没有必要。您经常在“模板方法”设计模式中看到这一点,例如HttpServlet
,其中每个方法都已经定义了默认行为,并且您可以自由地仅覆盖其中的一个(或多个)而不是全部。
在 JDK 1.0 中,确实需要在抽象类中至少有一个抽象方法。这个限制在 JDK 1.1(1997 年?(我老了))中被删除了,这样的类被添加到了 Java 库中,比如java.awt.event.KeyAdapter
.
在 C++ 中,您需要至少一个纯虚函数来使子类成为必要,并且至少需要一个虚函数来将 RTTI 添加到类中。通常使用析构函数是有意义的。
请注意,在覆盖非抽象方法时,使用@Override
是一个好主意。它不仅告诉读者关于代码试图做什么的重要信息,而且还发现了常见错误,其中拼写错误或不正确的参数类型会阻止覆盖。
不 - 您可以声明一个类抽象而无需任何抽象方法。该类的实例存在在概念上可能没有任何意义,或者您可能希望确保只能实例化该类的子类(无论出于何种原因)
如果一个类在其声明中具有abstract
修饰符,则它成为abstract
类。