Java 如何在接口中使用super-To-default实现
如果我可以使用Java 如何在接口中使用super-To-default实现,java,java-8,Java,Java 8,如果我可以使用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.print
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()
方法,那么我们必须扩展其中一个接口和两个接口。例如:interface Beta扩展Alpha
,然后它将使用reset()
的Beta版本。但是这里我们想使用super以及它将在哪里使用。调用默认方法实现的语法(可能来自两个不同的接口)使用接口的名称,后跟。super
,如下所示:
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();
}
}
class MyClass implements Alpha, Beta {
public void reset() {
Alpha.super.reset();
Beta.super.reset();
}
}
reset()
方法的此实现从两个接口调用默认方法实现。编译代码将产生错误:
java:class MyClass继承了alpha和beta类型的reset()的无关默认值
因为编译器无法选择在这种冲突情况下使用的声明
您可能应该使用
抽象类而不是像Alpha.super.reset()那样代码>这正是您引用它的方式。@vikeng21“default”是在Java8中引入的。这就是界面包含代码的原因。事实上,您可以在Java 8中提供默认实现。@不带注释的社区向下投票是有益的,我们这里有一个新用户,当我尝试应用上面的代码时,您在回答中编写的代码出现了错误,MyClass无法实现重置
。请编辑您的答案。@ManoharKumar这是因为该方法应该是公共的。