Java 8 是不是支持多重继承? [复制]

Posted

技术标签:

【中文标题】Java 8 是不是支持多重继承? [复制]【英文标题】:Does Java 8 support multiple inheritance? [duplicate]Java 8 是否支持多重继承? [复制] 【发布时间】:2016-08-24 04:33:57 【问题描述】:

我在阅读 Java 8 中的接口时遇到了这个话题,有些场景我们使用 default 或 static 关键字在接口中定义方法,允许下一个子重新定义相同的方法或实现它。这是否意味着多重继承?我发现还有一个问题是,返回类型必须是协变类型否则编译问题,这意味着它仍然不支持多重继承?我们可以说java支持多重继承吗?让我知道有关此主题的更多详细信息。

【问题讨论】:

@Draken 我认为其他问题并没有真正回答他的问题——因为这个问题根本不是在谈论 Java 8 和接口中的默认实现。 混淆在于继承这个词的用法,从技术上讲,继承只应用于扩展类,而不是接口。所以我们不能做多重继承,但可以做多重实现。我觉得进一步阅读该主题会有所帮助 是的,你是对的@Jägermeister 另一个问题是我们正在处理接口中的静态方法来进行虚假继承,我仍然会避免使用这个词,因为它给表格带来的混乱比它的价值更多。最好坚持使用更常见的术语,例如覆盖,而不是说它是继承。 【参考方案1】:

这是否意味着多重继承?

对于接口,是的,但不是类。人们通常认为是类,因为只有类才能具有字段和构造函数。这与 Java 1.0 没有什么不同

返回类型必须是协变类型否则编译问题,这意味着它仍然不支持多重继承?

是否需要协变返回类型与是否有多重继承无关。

我们能说java支持多重继承吗?

对于接口,是的。

【讨论】:

如果我们正在编写 2 个具有相同默认方法但返回类型不同的不同接口,那么 Java 期望返回类型是实现类中的协变类型。如果没有协变类型,Java 会抛出编译器错误。但要使其支持多重继承,返回类型可能会有所不同。我们可以使用静态方法使我们的Java支持多重继承。还是有一个问题,我们实际上必须附加 Parent 接口才能使用它的静态方法... @ShaikhNizamuddin 如果您有两个方法返回不兼容的类型,开发人员可能会混淆为这些方法提供相同的名称。我建议使用不同的名称,以便开发人员清楚使用它应该得到什么结果。 是的,为具有不同返回类型的方法使用不同的名称是件好事。也许在即将到来的 Java 版本中(有点假设,保持乐观)我们可以看到这种协变类型是明确的。 :) @ShaikhNizamuddin 类型推断是 Java 中的新功能,但是它可以使用类型推断来确定应该调用哪个重载方法。注意:JVM 在方法签名中包含返回类型,因此它支持具有不同返回类型的同名方法(Java 6 编译器中有一个错误允许您使用它)

以上是关于Java 8 是不是支持多重继承? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为什么像Java,C#和VB.NET现代面向对象的语言不支持多重继承[复制]

java中的多重继承是啥意思?

JDK 8 中的默认值是 Java 中多重继承的一种形式吗?

Java提高篇——Java实现多重继承

第53课 被遗弃的多重继承

多重继承中无用的超级? [复制]