首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 8中抽象类在接口上的首选项

Java 8中抽象类在接口上的首选项
EN

Stack Overflow用户
提问于 2014-06-23 11:42:38
回答 3查看 452关注 0票数 7

现在,我们知道Java 8在接口中引入了默认和静态方法。

接口最初是在Java中引入的,以避免发生在钻石问题中的多重继承中的C++。

但是随着Java 8接口中默认方法的引入,Java现在也引入了菱形问题,这在以前的版本中得到了避免。

不需要强制重写默认方法。

但是,当使用接口发生菱形问题时,实现这些接口的类必须覆盖默认方法。

现在,我有三个问题在我的脑海里:

  1. 为什么需要使用默认方法?
  2. 我们不能通过类本身拥有多个继承,而不是在接口中使用默认方法吗?
  3. 如果必须在Java 8中引入钻石问题,那么在以前的版本中避免钻石问题有什么必要呢?

有什么好的解释或解释的链接吗?

PS我没有在互联网上找到任何关于这方面的好文章的链接。

他们说的是抽象类给了你更多的具体性。

与之一样,抽象类可以有构造函数,但是接口不能。

因此,我再次想知道,如果抽象类更具体,并且可以有构造函数,

无论如何,Java已经引入了钻石问题,为什么我们现在应该有接口呢?抽象类不足以作为多重继承的独立工具吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-23 12:01:58

不,它没有重新引入菱形问题,因为接口仍然不能有任何状态,而且默认方法可能不是最终的。

因此,当您选择实现两个接口时,仍然可以通过选择一个提供的默认实现,或者通过提供自己的实现来实现默认方法。但是,您不会遇到从两个接口继承冲突状态,或者继承两个不同的最终方法而无法解决冲突的问题。

因此,以下是你的问题的答案:

  1. 为了能够在现有接口中引入新方法而不破坏向后兼容性:现有实现将自动实现这些方法,因为它们的实现位于基本接口中。
  2. 不,因为那会带来钻石问题。
  3. 不相干
票数 16
EN

Stack Overflow用户

发布于 2014-06-23 12:05:59

关于第1点:

为了支持所有集合类(如forEach方法)的lambda表达式,有必要添加一些具有向后兼容性的内容。

有关详细信息,请参阅此视频灯罩下兰达峰

票数 2
EN

Stack Overflow用户

发布于 2015-06-25 12:03:31

  1. 默认方法使增强现有界面成为可能,同时向现有用户提供与以前版本界面的二进制兼容性。

在这里可以看到更多https://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24365025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档