Java - Schnittstellen

Eine Schnittstelle ist ein Referenztyp in Java. Es ist ähnlich wie in der Klasse. Es ist eine Sammlung abstrakter Methoden. Eine Klasse implementiert eine Schnittstelle und erbt dadurch die abstrakten Methoden der Schnittstelle.

Neben abstrakten Methoden kann eine Schnittstelle auch Konstanten, Standardmethoden, statische Methoden und verschachtelte Typen enthalten. Methodenkörper existieren nur für Standardmethoden und statische Methoden.

Das Schreiben einer Schnittstelle ähnelt dem Schreiben einer Klasse. Eine Klasse beschreibt jedoch die Attribute und Verhaltensweisen eines Objekts. Und eine Schnittstelle enthält Verhaltensweisen, die eine Klasse implementiert.

Sofern die Klasse, die die Schnittstelle implementiert, nicht abstrakt ist, müssen alle Methoden der Schnittstelle in der Klasse definiert werden.

Eine Schnittstelle ähnelt einer Klasse auf folgende Weise:

  • Eine Schnittstelle kann beliebig viele Methoden enthalten.

  • Eine Schnittstelle wird in eine Datei mit a geschrieben .java Erweiterung, wobei der Name der Schnittstelle mit dem Namen der Datei übereinstimmt.

  • Der Bytecode einer Schnittstelle wird in a angezeigt .class Datei.

  • Schnittstellen werden in Paketen angezeigt, und die entsprechende Bytecodedatei muss sich in einer Verzeichnisstruktur befinden, die dem Paketnamen entspricht.

Eine Schnittstelle unterscheidet sich jedoch in mehreren Punkten von einer Klasse, einschließlich -

  • Sie können eine Schnittstelle nicht instanziieren.

  • Eine Schnittstelle enthält keine Konstruktoren.

  • Alle Methoden in einer Schnittstelle sind abstrakt.

  • Eine Schnittstelle darf keine Instanzfelder enthalten. Die einzigen Felder, die in einer Schnittstelle angezeigt werden können, müssen sowohl als statisch als auch als endgültig deklariert werden.

  • Eine Schnittstelle wird nicht um eine Klasse erweitert. es wird von einer Klasse implementiert.

  • Eine Schnittstelle kann mehrere Schnittstellen erweitern.

Schnittstellen deklarieren

Das interfaceDas Schlüsselwort wird verwendet, um eine Schnittstelle zu deklarieren. Hier ist ein einfaches Beispiel, um eine Schnittstelle zu deklarieren:

Beispiel

Es folgt ein Beispiel für eine Schnittstelle -

/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements

public interface NameOfInterface {
   // Any number of final, static fields
   // Any number of abstract method declarations\
}

Schnittstellen haben die folgenden Eigenschaften:

  • Eine Schnittstelle ist implizit abstrakt. Sie müssen das nicht verwendenabstract Schlüsselwort beim Deklarieren einer Schnittstelle.

  • Jede Methode in einer Schnittstelle ist implizit abstrakt, sodass das abstrakte Schlüsselwort nicht benötigt wird.

  • Methoden in einer Schnittstelle sind implizit öffentlich.

Beispiel

/* File name : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

Schnittstellen implementieren

Wenn eine Klasse eine Schnittstelle implementiert, können Sie sich die Klasse als Vertragsunterzeichnung vorstellen, in der Sie sich bereit erklären, das spezifische Verhalten der Schnittstelle auszuführen. Wenn eine Klasse nicht alle Verhaltensweisen der Schnittstelle ausführt, muss sich die Klasse als abstrakt deklarieren.

Eine Klasse verwendet die implementsSchlüsselwort zum Implementieren einer Schnittstelle. Das Schlüsselwort implements wird in der Klassendeklaration nach dem erweiterten Teil der Deklaration angezeigt.

Beispiel

/* File name : MammalInt.java */
public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Mammal eats
Mammal travels

Beim Überschreiben von in Schnittstellen definierten Methoden müssen verschiedene Regeln beachtet werden:

  • Überprüfte Ausnahmen sollten nicht für andere Implementierungsmethoden als die von der Schnittstellenmethode deklarierten oder für Unterklassen der von der Schnittstellenmethode deklarierten deklariert werden.

  • Die Signatur der Schnittstellenmethode und derselbe Rückgabetyp oder Subtyp sollten beim Überschreiben der Methoden beibehalten werden.

  • Eine Implementierungsklasse selbst kann abstrakt sein. In diesem Fall müssen Schnittstellenmethoden nicht implementiert werden.

Bei Implementierungsschnittstellen gibt es mehrere Regeln -

  • Eine Klasse kann mehrere Schnittstellen gleichzeitig implementieren.

  • Eine Klasse kann nur eine Klasse erweitern, aber viele Schnittstellen implementieren.

  • Eine Schnittstelle kann eine andere Schnittstelle erweitern, ähnlich wie eine Klasse eine andere Klasse erweitern kann.

Schnittstellen erweitern

Eine Schnittstelle kann eine andere Schnittstelle auf dieselbe Weise erweitern, wie eine Klasse eine andere Klasse erweitern kann. Dasextends Das Schlüsselwort wird verwendet, um eine Schnittstelle zu erweitern, und die untergeordnete Schnittstelle erbt die Methoden der übergeordneten Schnittstelle.

Die folgende Sportschnittstelle wird um Hockey- und Fußballschnittstellen erweitert.

Beispiel

// Filename: Sports.java
public interface Sports {
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

// Filename: Football.java
public interface Football extends Sports {
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

// Filename: Hockey.java
public interface Hockey extends Sports {
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Die Hockey-Oberfläche verfügt über vier Methoden, erbt jedoch zwei von Sports. Daher muss eine Klasse, die Hockey implementiert, alle sechs Methoden implementieren. Ebenso muss eine Klasse, die Fußball implementiert, die drei Methoden aus Fußball und die beiden Methoden aus Sport definieren.

Mehrere Schnittstellen erweitern

Eine Java-Klasse kann nur eine übergeordnete Klasse erweitern. Mehrfachvererbung ist nicht zulässig. Schnittstellen sind jedoch keine Klassen, und eine Schnittstelle kann mehr als eine übergeordnete Schnittstelle erweitern.

Das Schlüsselwort extens wird wird einmal verwendet, und die übergeordneten Schnittstellen werden in einer durch Kommas getrennten Liste deklariert.

Wenn die Hockey-Oberfläche beispielsweise sowohl Sport als auch Event erweitert, wird sie als - deklariert.

Beispiel

public interface Hockey extends Sports, Event

Schnittstellen markieren

Die häufigste Verwendung zum Erweitern von Schnittstellen tritt auf, wenn die übergeordnete Schnittstelle keine Methoden enthält. Beispielsweise hat die MouseListener-Schnittstelle im Paket java.awt.event java.util.EventListener erweitert, das definiert ist als -

Beispiel

package java.util;
public interface EventListener
{}

Eine Schnittstelle ohne Methoden wird als bezeichnet taggingSchnittstelle. Es gibt zwei grundlegende Entwurfszwecke für das Markieren von Schnittstellen:

Creates a common parent- Wie bei der EventListener-Schnittstelle, die um Dutzende anderer Schnittstellen in der Java-API erweitert wird, können Sie mithilfe einer Tagging-Schnittstelle ein gemeinsames übergeordnetes Element aus einer Gruppe von Schnittstellen erstellen. Wenn eine Schnittstelle beispielsweise EventListener erweitert, weiß die JVM, dass diese bestimmte Schnittstelle in einem Ereignisdelegierungsszenario verwendet wird.

Adds a data type to a class- In dieser Situation kommt der Begriff Tagging her. Eine Klasse, die eine Tagging-Schnittstelle implementiert, muss keine Methoden definieren (da die Schnittstelle keine hat), aber die Klasse wird durch Polymorphismus zu einem Schnittstellentyp.