23

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

4

5 回答 5

17

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

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

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

#1 的答案是主观的和风格问题。我个人会说是的。如果您的意图是防止类(没有抽象方法)被实例化,那么处理这个问题的最佳方法是使用构造函数,而不是标记它。privateprotectedabstract

于 2010-02-17T18:43:32.517 回答
15

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

于 2010-02-17T18:37:52.657 回答
10

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

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

请注意,在覆盖非抽象方法时,使用@Override是一个好主意。它不仅告诉读者关于代码试图做什么的重要信息,而且还发现了常见错误,其中拼写错误或不正确的参数类型会阻止覆盖。

于 2010-02-17T18:41:53.757 回答
8

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

于 2010-02-17T18:37:50.610 回答
-1

如果一个类在其声明中具有abstract修饰符,则它成为abstract类。

于 2010-02-17T18:47:32.567 回答