簡體   English   中英

如果兩個接口包含相同的默認方法會發生什么?

[英]What happens, if two interfaces contain the same default method?

如果我有兩個接口使用相同的默認方法,並且都使用類實現/請參閱此程序。

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();
  }  
}

然后會發生什么? 而且這個程序我也得到了無關的錯誤。

您無法實現具有相同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();

  }
}

實際上,這兩個方法在實現它們的類中是相同的。例如,如果您嘗試在Intellij中實現這兩個方法,則只能獲得一個方法。 即使您希望兩者都有不同的簽名,也無法聲明這兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM