抽象类是否需要至少有一个抽象方法?
答案 0 :(得分:15)
这篇文章的主题和正文提出了两个不同的问题:
#2的答案肯定是否定的。
#1的答案是主观的,是一种风格问题。我个人会说是的。如果你的目的是防止一个类(没有抽象方法)被实例化,那么处理这个的最好方法是使用 private
protected
构造函数,而不是通过标记它abstract
。
答案 1 :(得分:14)
不,没有必要。您经常会在"template method"设计模式中看到这一点,例如HttpServlet
,其中每个方法都已定义默认行为,您可以自由地覆盖其中一个(或多个)而不是 all 他们。
答案 2 :(得分:10)
在JDK 1.0中,确实需要在抽象类中至少有一个抽象方法。在JDK 1.1(1997?(我很老))中删除了这个限制,并将这些类添加到Java库中,例如java.awt.event.KeyAdapter
。
在C ++中,您需要至少一个纯虚函数来创建必需的子类,并且至少需要一个虚函数来将RTTI添加到类中。通常,使用析构函数是有意义的。
注意在覆盖非抽象方法时,使用@Override
是个好主意。它不仅告诉读者有关代码尝试执行操作的重要信息,还会发现拼写错误或错误参数类型阻止覆盖的常见错误。
答案 3 :(得分:6)
不 - 您可以在没有任何抽象方法的情况下声明类摘要。对于该类的实例存在概念上可能没有任何意义,或者您可能希望确保只能实例化该类的子类(无论出于何种原因)
答案 4 :(得分:-1)
如果某个类在其声明中有abstract
修饰符,则它变为abstract
类。