在Java中,一个类只能扩展一个父类,但可以实现多个接口。
用
在Java 8接口中引入默认方法后,一类可能会继承多个
通过实现2个具有相同默认方法的接口来实现具有相同签名的方法
像在C++中那样会产生钻石问题
以下代码示例输出
new C().hello(); is
这是第二
public interface First {
default void hello(){
System.out.println("This is First");
}
}
public interface Second extends First {
default void hello(){
System.out.println("This is Second");
}
}
public class MyClass implements First,Second {
public static void main(String[] args) {
new MyClass().hello();
}
}
Java用于解决钻石问题的解决规则是什么?
一个简单的答案,例如谁占上风,什么时候占上风。
最佳答案
当类从多个位置(另一个类或接口)继承具有相同签名的方法时,请遵循以下规则:
优先于任何默认方法声明。
界面被选中。 (例如,在您的案例中,Second接口中的方法应在Second扩展First时运行)。
通过覆盖它并调用来显式选择要使用的默认方法实现
明确的所需方法。