У меня есть три интерфейса A, B и C и один класс D. B и C расширяют A, а D реализует B и C. Интерфейс A имеет метод по умолчанию, который называется «делает».Я ожидал ошибки во время компиляции или во время выполнения, однако программа была выполнена без ошибок.И B, и C наследуются от A. Не следует ли путать компилятор относительно того, какой унаследованный метод вызывается в D, поскольку D наследует два метода по умолчанию, один из C и один из B. Все три интерфейса и класс определены в отдельныхфайлы.Я разместил код последовательно в области кода ниже для демонстрации.
public interface A {
default public void does(){
System.out.println("A");
}
}
public interface B extends A {
}
public interface C extends A {
}
public class D implements B, C {
}
public class Sample {
public static void main(String[] args) {
new D().does();
}
}