我对java中的抽象类有点困惑。我知道每当类编译器中存在抽象方法时,都会强制开发人员将类标记为抽象。但即使我们在类中没有任何抽象方法,我们仍然将整个类标记为抽象。我不明白为什么我们可以这样做。当没有抽象方法时,允许开发人员将类标记为抽象的目的是什么?可以说原因是我们不想创建该类的实例。如果是这个原因,那么将类的构造函数标记为私有(private)比标记类抽象更合适。
最佳答案
使用不带抽象方法的抽象类有一个非常有用的原因:为可重写方法提供默认实现。
JDK本身就有几个完美的例子。例如,查看 WindowAdapter
。它实现了WindowListener
接口(interface)(除其他外),但提供空的不执行任何操作的方法实现。在大多数情况下,您希望注册一个仅重写一两个接口(interface)方法的窗口监听器。然后您自己的类只需扩展 WindowAdapter
而不是实现 WindowListener
。
请注意,对于接口(interface)中的 Java 8 默认方法,这个原因不再成立,事实上,没有抽象方法的抽象类不再有意义。
关于java - 为什么没有抽象方法的情况下将类标记为抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471053/