Schnittstellen-Standardmethode in Java

Sheeraz Gul 12 Oktober 2023
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:

  1. Die abstrakte Klasse kann Konstruktoren definieren, während die default-Methode implementiert werden kann, um andere Schnittstellen aufzurufen.
  2. 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:

  1. 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.
  2. 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.
  3. 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 Gul avatar Sheeraz Gul avatar

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

Verwandter Artikel - Java Interface