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

时间:2014-06-23 11:42:38

标签: java interface abstract-class java-8 diamond-problem

现在,我们知道Java 8在接口中引入了默认和静态方法 接口最初是用Java引入的,以避免在多重继承中发生在C ++中的the diamond problem

但是随着Java 8中接口中默认方法的引入,Java现在也引入了钻石问题,这在以前的版本中已经避免了。

不会强制要求覆盖默认方法 但是当钻石问题使用接口时,实现这些接口的类必须覆盖默认方法。

所以现在,我脑子里有三个问题:

  1. 为什么需要默认方法?
  2. 我们不能通过类本身进行多重继承,而不是在接口中使用默认方法吗?
  3. 如果他们不得不在Java 8中引入钻石问题,那么在以前版本中需要避免钻石问题是什么?
  4. 有任何好的解释或任何解释链接?

    PS 我在互联网上找不到包含任何好文章的链接。
    他们所说的只是一个抽象的课程给你更多的具体性 就像在,抽象类可以有构造函数,但接口不能。

    所以,我想知道,如果抽象类更具体,并且可以有构造函数,
    无论如何Java引入了钻石问题,为什么我们现在应该有接口呢?作为多重继承的独立,抽象类不是很好吗?

2 个答案:

答案 0 :(得分:2)

关于第1点:

为了支持所有集合类的lambda表达式,例如forEach方法,有必要添加具有向后兼容性的东西。

请参阅此视频了解详情Lambda Peak Under the hood

答案 1 :(得分:0)

  1. 默认方法可以增强现有界面,同时为现有用户提供与以前版本界面的二进制兼容性。
  2. 在此处查看更多https://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html