java - 为什么没有抽象方法的情况下将类标记为抽象

标签 java oop abstract-class

我对java中的抽象类有点困惑。我知道每当类编译器中存在抽象方法时,都会强制开发人员将类标记为抽象。但即使我们在类中没有任何抽象方法,我们仍然将整个类标记为抽象。我不明白为什么我们可以这样做。当没有抽象方法时,允许开发人员将类标记为抽象的目的是什么?可以说原因是我们不想创建该类的实例。如果是这个原因,那么将类的构造函数标记为私有(private)比标记类抽象更合适。

最佳答案

使用不带抽象方法的抽象类有一个非常有用的原因:为可重写方法提供默认实现。

JDK本身就有几个完美的例子。例如,查看 WindowAdapter 。它实现了WindowListener接口(interface)(除其他外),但提供空的不执行任何操作的方法实现。在大多数情况下,您希望注册一个仅重写一两个接口(interface)方法的窗口监听器。然后您自己的类只需扩展 WindowAdapter 而不是实现 WindowListener

请注意,对于接口(interface)中的 Java 8 默认方法,这个原因不再成立,事实上,没有抽象方法的抽象类不再有意义。

关于java - 为什么没有抽象方法的情况下将类标记为抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471053/

相关文章:

java - 安卓分钟:seconds

php - 如何在模拟对象中设置变量

c# - 从另一个类定义一个类的变量

C++中抽象类的函数定义

c++ - 抽象类型的复制构造数据成员

Java ObservableList 使用字符串谓词进行过滤

Java套接字编程,为什么浏览器多次建立连接?

java - 调用 PGPOnePassSignature.verify 时签名长度不正确

php - MVC,类去哪儿了?

c# - 移除对继承的抽象类引用的依赖