java - 仅具有抽象方法的抽象类

标签 java oop

给定一个只有抽象方法的抽象类,它和接口(interface)之间有什么区别?

我能看到的唯一区别与使用接口(interface)的多重继承的能力有关。

在这种情况下是否还有其他重要的差异来决定是这样做还是使用接口(interface)?

最佳答案

  1. 抽象类是用来继承的,当一个类继承另一个类时,就意味着这两个类之间存在很强的关系。例如,如果我们有一个名为“Canine”的抽象基类,则任何派生类都应该是属于 Canine 家族的动物(例如狗或狼)。我们使用“应该”这个词的原因是 Java 开发人员需要确保维持这种关系。

另一方面,对于接口(interface),接口(interface)本身和实现该接口(interface)的类之间的关系不一定很强。例如,如果我们有一个名为“House”的类,那么该类还可以实现一个名为“AirConditioning”的接口(interface)。拥有空调并不是真正的房屋的重要组成部分(尽管有些人可能会争论这一点),并且这种关系并不像“TownHouse”类别和“House”类别之间的关系或“House”类别之间的关系那样牢固。 “Apartment”类派生自“House”类。

因为 TownHouse 是 House 的一种类型,所以这种关系非常牢固,并且通过继承而不是接口(interface)来定义会更合适。

因此,我们可以总结第一点,即当抽象类与其派生类之间存在很强的关系时,抽象类会更合适。同样,这是因为抽象类与继承关系非常密切,这意味着很强的关系。但是,对于接口(interface),接口(interface)和实现该接口(interface)的类之间不需要有很强的关系。

关于java - 仅具有抽象方法的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173934/

相关文章:

ios - 以编程方式将自定义类名称设置为 Storyboard

c++ - 在 B 类中初始化 A 类(带有引用成员)

c# - 使用继承来创建自定义的、类型安全的、空安全的集合?

java - 从 Gradle 运行单个 cucumber-jvm .feature 文件

Java 8 Streams减少删除重复项并保留最新条目

java - 如何在 ionic 3 应用程序启动屏幕上设置自定义微调器

c# - 字段初始化

java - JDesktopPane.setOpaque(false) 加上 JInternalFrame 的使用会抑制包含 JFrame 的关闭

java - Neo4j 在切换版本时显示错误

函数调用中未知类实例的 Python 标准 (PEP) 名称