6

如果我有两个具有相同默认方法的接口,并且都使用一个类实现/请参阅此程序。

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 main_class {
  public static void main(String args[]) {
    MyClass ob = new MyClass();
    ob.reset();
    ob.display();
  }  
}

那么会发生什么?而且我在这个程序中遇到了不相关的错误。

4

2 回答 2

7

您不能实现具有相同 Java 8 默认方法签名的多个接口(不在子类中显式覆盖)

. 您可以通过实施方法来解决它,例如

class MyClass implements alpha, beta {
  void display() {
    System.out.println("This is not default");
  }

  @Override
  public void reset() {
    //in order to call alpha's reset
    alpha.super.reset();
    //if you want to call beta's reset 
    beta.super.reset();

  }
}
于 2014-12-25T16:42:35.813 回答
1

实际上,这两种方法在实现它们的类中是相同的。例如,如果您尝试在 Intellij 中实现这两种方法,您只会得到一种方法。即使您想为他们两个拥有不同的签名,您也不​​能声明这两个。

于 2014-12-25T17:23:22.450 回答