Ann*_*nko 62
Java Lambda FAQ有一个完美的解释.
这是一个关于钻石问题的引用?那篇文章:
interface A {
void m() default { ... }
}
interface B extends A {}
interface C extends A {}
class D implements B, C {}
Run Code Online (Sandbox Code Playgroud)
在最初的情况下(上面的代码),由D继承的m的实现明确地由A定义- 没有其他可能性.如果情况发生变化,以便B现在也声明m的默认实现,那么它将成为D "最具体的实现"规则继承的实现.但是如果B和C都提供默认实现,那么它们就会冲突,并且D必须使用语法X.super.m(...)来显式选择其中一个,否则重新声明方法本身,覆盖所有超类型声明.
请务必查看以前有关解决冲突方法声明规则的文章以及有关Java Lambda项目的其他文章 - 它们非常好.
Ale*_*lex 14
以下是Java 8的新接口模型和多重继承的钻石问题的详细说明.
正如你可能在这个例子中看到,从JDK 8,Java已经推出了一种多重继承作为两者的 类和它的接口可能包含 执行同样的方法(相同的名称和签名)的.为了解决这个问题的钻石中有何种顺序实现,则使用一个优先级:只有当类实现所有的接口的缺省的/可选的方法,代码可以编译和使用这个类的实现.否则,编译器会尝试使用接口的默认实现来修补缺少的实现.如果方法有多个默认实现,则会发生菱形问题,编译器会拒绝编译.
Java 8的新接口模型是接近向后兼容性的结果 ,即保持针对Java 8接口编写的现有代码可编译.
| 归档时间: |
|
| 查看次数: |
16806 次 |
| 最近记录: |