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 http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html,但它是私人邮件列表的一部分,我无法直接询问他们。
有关如何在 JDK 8 中使用默认值以及扩展 Collection 接口以支持 lambda 的更多详细信息,请参阅此内容:https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf
重复操作的答案是:
为了解决多重继承问题,实现两个接口的类必须提供该方法的实现,为相同的方法名称和签名提供默认实现。[全文] http://www.baptiste-wicht.com/2010/05/java-7-add-public-defender-methods-to-java-interfaces/
我对你的问题的回答是:是的,这是多重继承的一种形式,因为你可以继承不同父母的行为。缺少的是继承状态,即。例如,属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)