繁体   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