首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JDK 8中的默认值是Java中的多重继承形式吗?

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

Stack Overflow用户
提问于 2011-10-22 14:25:44
回答 2查看 19.8K关注 0票数 86

JDK 8中的一个新特性允许您在保留二进制兼容性的同时添加到现有接口。

语法如下所示

public interface SomeInterface() {
  void existingInterface();
  void newInterface() default SomeClass.defaultImplementation;
}

通过这种方式,对于所有现有的SomeInterface实现,当它们升级到这个新版本时,它们不会突然出现围绕newInterface()的编译错误。

虽然这很巧妙,但当您实现两个接口时,会发生什么情况呢?这两个接口都添加了一个新的默认方法,而您并没有实现它。让我举个例子来解释一下。

public interface Attendance {
   boolean present() default DefaultAttendance.present;
}

public interface Timeline {
   boolean present() default DefaultTimeline.present;
}

public class TimeTravelingStudent implements Attendance, Timeline {

}

// which code gets called?
new TimeTravelingStudent().present();

这已经被定义为JDK 8的一部分了吗?

我发现Java之神在这里谈论着类似的东西,http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html,但它是私人邮件列表的一部分,我不能直接问他们。

有关如何在JDK8中使用默认值以及如何扩展Collection接口以支持lambdas的更多详细信息,请参阅这里:https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf

EN

回答 2

Stack Overflow用户

发布于 2014-08-04 14:46:23

如果有人还在寻找答案,如果一个类使用相同的默认方法实现了两个接口,那么这个类需要通过提供自己的实现来解决歧义问题。有关默认方法中的继承如何工作的更多详细信息,请参阅this教程。

票数 3
EN

Stack Overflow用户

发布于 2014-01-07 00:15:55

据我所知,它不是多重继承,因为它们是无状态的。因此,虚拟扩展方法不支持完整的对象或类功能。

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

https://stackoverflow.com/questions/7857832

复制
相关文章

相似问题

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