Java 8 Standardmethodenvererbung
Angenommen, es gibt folgende Typen:
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();
}
}
In diesem Szenario, wennmain
wird ausgeführt, "hi from foo" wird gedruckt. Warum tutFoo
's Umsetzung haben Vorrang? NichtBar
erbensayHi()
vonBase
, da wennMyClass
sollte nur @ implementierBar
, dasBase
Implementierung würde aufgerufen werden? Es wäre also sinnvoll, den Code immer noch nicht zu kompilieren. Auch seitBar
sollte habenBase
's Implementierung vonsayHi()
, warum kann ich es nicht in @ überschreibMyClass
mögen
@Override
public void sayHi() {
Bar.super.sayHi();
}
Der folgende Fehler tritt auf, wenn Sie versuchen, dies zu tun:
bad type qualifier Bar in der Standardmethode für Superaufrufe, sayHi () wird in Foo @ überschrieb