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

Ответы на вопрос(2)

Ваш ответ на вопрос