默认方法和扩展其他接口的接口
2022-09-01 12:17:24
假设有两个接口和扩展 。Interface1
Interface2
Interface2
Interface1
interface Interface1 {
default void method() {
System.out.println("1");
}
// Other methods
}
interface Interface2 extends Interface1 {
@Override
default void method() {
System.out.println("2");
}
// Other methods
}
假设我想创建一个实现的类,但我想成为 中的版本。如果我写Interface2
method()
Interface1
class MyClass implements Interface1, Interface2 {
public void method() {
Interface1.super.method();
}
}
我收到编译错误:
默认超级调用中的错误类型限定符:冗余接口接口接口 1 由接口 2 扩展
可以通过创建第三个接口来解决此问题:
interface Interface3 extends Interface1 {
default void method() {
Interface1.super.method();
}
}
然后:
class MyClass implements Interface1, Interface2, Interface3 {
public void method() {
Interface3.super.method();
}
}
这编译得很好,如果我实例化一个新的并调用,输出是预期的。MyClass
method()
1
所以我的问题是,鉴于绕过限制非常容易,以至于你只能为链中最具体的接口编写,那么限制的原因是什么?首先禁止你写作可以防止哪些问题?InterfaceName.super.method()
Interface1.super.method()