Herencia del método predeterminado de Java 8
Digamos que hay los siguientes tipos:
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();
}
}
En este escenario, simain
se ejecuta, se imprime "hola de foo". Por queFoo
¿Tiene prioridad la implementación? NoBar
heredarsayHi()
deBase
, ya que siMyClass
era solo implementarBar
, elBase
se llamaría implementación? Por lo tanto, tendría sentido que el código aún no se compilara. Además, desdeBar
debería tenerBase
implementación desayHi()
, ¿por qué no puedo anularlo enMyClass
me gusta:
@Override
public void sayHi() {
Bar.super.sayHi();
}
Se produce el siguiente error al intentar hacerlo:
Barra de calificador de tipo incorrecto en el método predeterminado de súper llamada, sayHi () se reemplaza en Foo