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

时间:2010-02-17 18:35:19

标签: java abstract-class abstract abstract-methods

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

5 个答案:

答案 0 :(得分:15)

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

  1. 它应该至少有一个抽象成员吗?
  2. 是否需要至少有一个抽象成员?
  3. #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类。