Schnittstellen-Standardmethode in Java
Dieses Tutorial zeigt, wie Sie die Methode default
in der Schnittstelle in Java verwenden.
Schnittstellen-Standardmethode in Java
Die default
-Methoden wurden in Java 8 eingeführt, bevor die Schnittstellen nur abstrakte Methoden hatten. Die default
- oder Defender-Methoden ermöglichen es dem Entwickler, der Schnittstelle neue Methoden hinzuzufügen, ohne die Implementierung zu beschädigen.
Die Standard
-Methode bietet die Flexibilität, der Schnittstelle zu erlauben, die Implementierung zu definieren. Diese Implementierung wird in Situationen, in denen eine Klasse die Implementierung dieser Methode nicht bereitstellen konnte, als Standard angesehen.
Versuchen wir, eine Schnittstelle mit einer default
-Methode zu erstellen:
package delftstack;
public interface Demo_Interface {
public void Existing_Method();
default public void Default_Method() {
System.out.println("a default method is added to the interface");
}
}
Der obige Code fügt der Schnittstelle eine Standard
-Methode hinzu. Versuchen wir ein weiteres Beispiel, das zeigt, wie die Standard
-Methoden funktionieren:
package delftstack;
interface Demo_Interface {
// The abstract method
public void cube(int x);
// The default method
default void show() {
System.out.println("Default Method is Executed");
}
}
public class Example implements Demo_Interface {
// The implementation of an abstract method
public void cube(int x) {
System.out.println(x * x * x);
}
public static void main(String args[]) {
Example Demo = new Example();
Demo.cube(6);
// execute default method.
Demo.show();
}
}
Der obige Code erstellt eine abstrakte Methode, um den Würfel einer ganzen Zahl zu berechnen, und eine Standard
-Methode, um die Ausgabe anzuzeigen. Siehe die Ausgabe:
216
Default Method is Executed
Standardmethoden vs. abstrakte Klassen
Die Standardmethoden in Schnittstellen und die abstrakten Klassen verhalten sich beide gleich, weisen jedoch einige Unterschiede auf:
- Die abstrakte Klasse kann Konstruktoren definieren, während die
default
-Methode implementiert werden kann, um andere Schnittstellen aufzurufen. - Die abstrakte Klasse ist strukturierter, und ihr können Zustände zugeordnet werden. Gleichzeitig referenzieren
Standard
-Methoden nicht den Zustand einer bestimmten Implementierung.
Standardmethoden im Vergleich zu regulären Methoden
Die Standardmethode unterscheidet sich von der regulären Methode. Die Hauptunterschiede sind:
- Die regulären Methoden in Klassen können die Methodenargumente und Felder der Klasse modifizieren. Im Gegensatz dazu können die
default
-Methoden nur auf ihre eigenen Argumente zugreifen, da die Schnittstelle keinen Zustand hat. - Die regulären Methoden müssen die Implementierung unterbrechen, um der Klasse neue Funktionalität hinzuzufügen, während die
Standard
-Methoden der Schnittstelle neue Funktionalität hinzufügen können, ohne die Implementierung zu unterbrechen. - Wir können die
Standard
-Methoden als abstrakte Methoden neu deklarieren und die Unterklasse zwingen, sie zu überschreiben.
Standardmethoden und Mehrfachvererbung
Wie wir wissen, sind Mehrfachvererbungen in Java nur über Schnittstellen möglich. Jetzt kann die Java-Klasse mehrere Schnittstellen haben, und jede Schnittstelle kann eine Standard
-Methode mit derselben Methodensignatur definieren, wodurch ein Konflikt zwischen den geerbten Methoden entsteht.
Siehe Beispiel:
package delftstack;
interface Interface_One {
default void defaultMethod() {
System.out.println("Interface One default method");
}
}
interface Interface_Two {
default void defaultMethod() {
System.out.println("Interface Two default method");
}
}
public class Example implements Interface_One, Interface_Two {}
Der obige Code wird einen Kompilierungsfehler aufweisen. Siehe die Ausgabe:
java: class Example inherits unrelated defaults for defaultMethod() from types Interface_One and Interface_Two
Es gibt eine einfache Lösung für diesen Fehler; wir müssen eine default
-Methodenimplementierung in der Klasse Example
bereitstellen. Siehe Beispiel:
package delftstack;
interface Interface_One {
default void defaultMethod() {
System.out.println("Interface One default method");
}
}
interface Interface_Two {
default void defaultMethod() {
System.out.println("Interface Two default method");
}
}
public class Example implements Interface_One, Interface_Two {
public void defaultMethod() {}
}
Dies wird das Problem lösen. Wenn Sie außerdem die Methode default
von der Super-Schnittstelle in der Klasse aufrufen möchten, können Sie dies verwenden:
package delftstack;
interface Interface_One {
default void defaultMethod() {
System.out.println("Interface One default method");
}
}
interface Interface_Two {
default void defaultMethod() {
System.out.println("Interface Two default method");
}
}
public class Example implements Interface_One, Interface_Two {
public void defaultMethod() {
// other code
Interface_One.super.defaultMethod();
}
}
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook