如何在界面中使用super到默认实现

时间:2014-12-26 04:16:36

标签: 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.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和它将在哪里使用。

2 个答案:

答案 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()的无关默认值

因为编译器无法选择在这种冲突情况下使用的声明。

Here is an article for your reference.