В следующем коде, если я раскомментирую 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-default-method-inheritance
I3
, произойдет сбой компиляции. Я не могу воспроизвести эту проблему. Если я только раскомментируюI3
, то ошибка компиляции не должна появиться, так какI3
не используется вpublic class DefaultMethodTest implements I, I2 {..}
. Ваш пример кода, вероятно, должен включатьI3
вDefaultMethodTest
, напримерpublic class DefaultMethodTest implements I, I2, I3 {..}
илиpublic class DefaultMethodTest implements I2, I3{..}
. - person Pshemo   schedule 21.06.2020System.out.println("I2");
внутриI3
, вероятно, должно бытьSystem.out.println("I3");
для ясности. - person Pshemo   schedule 21.06.2020