Beachten Sie Folgendes:Wie Standard-Interface-Methode von einer anderen Unterklasse aufgerufen wird?
//Fooable.java
public interface Fooable {
public default void foo() {
System.out.println("Fooable::foo");
}
//Lots of other non-default methods...
}
//MyFooable.java
public class MyFooable implements Fooable {
@Override
public void foo() {
System.out.println("MyFooable::foo");
}
//implements other methods in Fooable...
}
//MyAdvancedFooable.java
public class MyAdvancedFooable extends MyFooable {
@Override
public void foo() {
Fooable.super.foo();
System.out.println("MyAdvancedFooable::foo");
}
public static void main(String[] args) {
new MyAdvancedFooable().foo();
}
}
Wie Sie sehen können, ich will foo()
in Fooable
von MyAdvancedFooable
nennen (eine Unterklasse von MyFooable
). Wenn ich jedoch versuche, zu kompilieren, erhalte ich den folgenden Fehler:
MyAdvancedFooable.java:4: Fehler: keine einschließende Klasse: Fooable Fooable.super.foo();
wenn ich MyAdvancedFooable extends MyFooable implements Fooable
versuchen erhalte ich die folgenden:
MyAdvancedFooable.java:4: Fehler: bad, Qualifier Fooable in Standard-Super Anruf Fooable.super.foo(); Methode foo() wird in MyFooable überschrieben
Wie kann ich dieses Problem beheben, ohne eine neue anonyme Implementierung von Fooable erstellen zu müssen?
Die OP will die 'foo()' Methode aus der anrufen Schnittstelle. Ihre Lösung würde stattdessen die Methode in 'MyFooable' aufrufen –