Java 8 наследование метода по умолчанию
Допустим, есть следующие типы:
public interface Base {
default void sayHi(){
System.out.println("hi from base");
}
}
public interface Foo extends Base {
@Override
default void sayHi(){
System.out.println("hi from foo");
}
}
public interface Bar extends Base {
}
public class MyClass implements Foo, Bar {
public static void main(String[] args) {
MyClass c = new MyClass();
c.sayHi();
}
}
В этом случае, еслиmain
выполняется «привет от foo». ПочемуFoo
Реализация имеет приоритет? неBar
унаследоватьsayHi()
отBase
, так как еслиMyClass
должен был только реализоватьBar
,Base
реализация будет называться? Поэтому было бы разумно, чтобы код все еще не компилировался. Кроме того, так какBar
должен иметьBase
РеализацияsayHi()
почему я не могу переопределить это вMyClass
лайк:
@Override
public void sayHi() {
Bar.super.sayHi();
}
При попытке сделать это возникает следующая ошибка:
Неверный квалификатор типа Bar в методе супер-вызова по умолчанию, sayHi () переопределяется в Foo