6

同じデフォルトメソッドを持つ2つのインターフェースがあり、両方がクラスで実装している場合/ このプログラムを参照してください。

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 デフォルト メソッドの同じシグネチャを持つ複数のインターフェイスを実装することはできません (子クラスで明示的にオーバーライドしないと)。

. メソッドEgを実装することで解決できます

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

実際には、これら 2 つのメソッドは、それらを実装するクラスでは同じです。たとえば、Intellij で 2 つのメソッドを実装しようとすると、1 つのメソッドしか得られません。両方に異なる署名を付けたい場合でも、2 つを宣言することはできません。

于 2014-12-25T17:23:22.450 に答える