首页 > 解决方案 > Kotlin(或自 Java 8 以来)有抽象类和接口而不是多重继承的原因是什么?

问题描述

在 C++ 或 Python 上,支持多重继承,因此您可以扩展多个类或抽象类。因此,如果您想制作类似接口的东西,您只需制作一个完整的抽象类。

在 Java 或 Kotlin 等语言上,不支持多重继承,但它们具有接口,一个类可以多次实现以实现与此功能类似的功能。但是,在 Kotlin 或自 Java 8 以来,抽象类或接口之间没有太大区别,因为它们都可以有抽象方法和具体实现,所以我想知道什么时候使用每一个,主要是语言的原因是什么(特别是 Kotlin是更新的)以这种方式实现,而不是使用多重继承,如果你可以用后者实现同样的事情?

或者只是实现多重继承的另一种方式,或者抽象类和接口提供了多重继承所没有的东西,它会影响在哪些情况下使用一个而不是另一个(接口优于抽象类)?

标签: javakotlininterfaceabstract-class

解决方案


然而,在 Kotlin 或自 Java 8 以来,抽象类或接口之间没有太大区别,因为它们都可以有抽象方法和具体实现

有一个主要区别:抽象类可以具有状态(由具体实现继承),而接口则不能。

所以我想知道什么时候使用每个

当您需要定义要与具体实现共享的有状态行为时,您必须使用抽象类。否则,最好坚持使用接口,因为它的约束较少:一个类可以实现多个接口,并且可以通过委托等方式实现接口。

如果您可以使用后者实现相同的目标,那么以这种方式实现语言(尤其是更新的 Kotlin)而不是使用多重继承的原因是什么?

只是一个猜测,但 Kotlin 可能无法获得多重继承,即使它是可取的,因为 JVM 不支持它。但无论如何,我不认为这是设计师想要采取的方向,因为它需要可靠的用例,这真的很有帮助。在 Kotlin 中有很好的语法糖的简单委托,这有助于以更可控的方式覆盖这类用例。


推荐阅读