如果我可以使用super
在以下程序中将默认实现引用到接口,那将是非常棒的。和Alpha.super.reset()
一样,请告诉我们这个陈述将在何处使用。
interface Alpha {
default void reset() {
System.out.println("This is alpha version of default");
}
}
interface Beta {
default void reset() {
System.out.println("This is beta version of default");
}
}
class MyClass implements Alpha, Beta {
void display() {
System.out.println("This is not default");
}
}
class MainClass {
public static void main(String args[]) {
MyClass ob = new MyClass();
ob.reset();
ob.display();
}
}
例如,如果我们想要使用reset()
方法的beta版本,那么我们必须扩展其中一个接口。例如:interface Beta extends Alpha
然后它将使用reset()
的测试版。但是在这里我们想要使用super和它将在哪里使用。
答案 0 :(得分:2)
调用可能来自两个不同接口的默认方法实现的语法使用接口的名称,后跟.super
,如下所示:
class MyClass implements Alpha, Beta {
public void reset() {
Alpha.super.reset();
Beta.super.reset();
}
}
reset()
方法的这种实现从两个接口调用默认方法实现。
答案 1 :(得分:0)
编译代码会产生错误:
java:class MyClass从类型alpha和beta
继承reset()的无关默认值
因为编译器无法选择在这种冲突情况下使用的声明。