Überschreiben von Standardmethoden in Java
Die in Java 8 eingeführten Standardmethoden bieten Erweiterbarkeit für Schnittstellen, ohne dass bestehende Implementierungen geändert werden müssen. Es stellt sich jedoch die Frage, ob es möglich ist, die Standardimplementierung explizit aufzurufen, wenn sie überschrieben wurde oder es aufgrund mehrerer Standardimplementierungen in verschiedenen Schnittstellen zu Konflikten kommt.
Betrachten Sie das folgende Beispiel:
interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // How to invoke A.foo() here? } }
Um die Standardimplementierung von foo in Klasse B aufzurufen, können Sie verwenden A.super.foo().
public void afoo() { A.super.foo(); }
Mit dieser Syntax können Sie auf die ursprüngliche Standardimplementierung zugreifen, auch wenn die Methode in der implementierenden Klasse überschrieben wurde.
In Fällen, in denen mehrere Schnittstellen vorhanden sind Wenn Sie über Standardmethoden mit derselben Signatur verfügen, z. B. die Schnittstellen A und C, die beide über eine foo-Methode verfügen, können Sie die gewünschte Standardimplementierung auswählen invoke:
public class ChildClass implements A, C { @Override public void foo() { A.super.foo(); // Accesses original foo() from A C.super.foo(); // Accesses original foo() from C } }
Diese Syntax bietet Flexibilität bei der Auswahl der gewünschten Standardimplementierung, oder Sie können sogar beide Implementierungen in Ihre eigene benutzerdefinierte foo-Methode integrieren. Die Methodenaufrufsyntax wird formal in Kapitel 15 der Java Language Specification beschrieben.
Das obige ist der detaillierte Inhalt vonWie können Sie die Implementierung einer Standardmethode in Java explizit aufrufen, wenn sie überschrieben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!