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这是因为该方法应该是公共的。