В следующем коде, если я раскомментирую I3
и реализую I2
и I3
, то произойдет сбой compilation
со следующей ошибкой:
несвязанные значения по умолчанию для m2 () из I3 и I2
Это такое же прекрасное и ожидаемое поведение.
Однако, когда я заменяю I3
на I
, он успешно компилируется, и я получаю I2
в качестве вывода.
public class DefaultMethodTest implements I, I2 {
public static void main(String[] args) {
DefaultMethodTest obj = new DefaultMethodTest();
obj.m2();
}
}
interface I {
default void m2() {
System.out.println("I1");
}
}
interface I2 extends I {
default void m2() {
System.out.println("I2");
}
}
//interface I3 extends I {
//
// default void m2() {
// System.out.println("I3");
// }
//}
Теперь у меня есть пара вопросов:
Почему во втором случае нет сбоя compilation
, хотя оба интерфейса имеют одинаковый метод по умолчанию m2
?
Почему I2
имеет приоритет над I
?.
Примечание: этот вопрос не относится к java -8-наследование-метода-по умолчанию