Java - Schnittstellen
Eine Schnittstelle ist ein Referenztyp in Java. Es ist ähnlich wie im Unterricht. Es ist eine Sammlung abstrakter Methoden. Eine Klasse implementiert eine Schnittstelle und erbt dabei 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. Aber eine Klasse beschreibt die Attribute und das Verhalten 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 einer .java geschrieben Erweiterung, wobei der Name der Schnittstelle mit dem Namen der Datei übereinstimmt.
-
Der Bytecode einer Schnittstelle erscheint in einer .class Datei.
-
Schnittstellen erscheinen in Paketen und ihre entsprechende Bytecode-Datei muss sich in einer Verzeichnisstruktur befinden, die mit dem Paketnamen übereinstimmt.
Eine Schnittstelle unterscheidet sich jedoch in mehrfacher Hinsicht von einer Klasse, einschließlich −
-
Sie können keine Schnittstelle instanziieren.
-
Eine Schnittstelle enthält keine Konstruktoren.
-
Alle Methoden in einer Schnittstelle sind abstrakt.
-
Eine Schnittstelle kann keine Instanzfelder enthalten. Die einzigen Felder, die in einer Schnittstelle erscheinen können, müssen sowohl statisch als auch final deklariert werden.
-
Eine Schnittstelle wird nicht durch eine Klasse erweitert; es wird von einer Klasse implementiert.
-
Eine Schnittstelle kann mehrere Schnittstellen erweitern.
Schnittstellen deklarieren
Die Schnittstelle Das 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 die Zusammenfassung nicht verwenden Schlüsselwort beim Deklarieren einer Schnittstelle.
-
Jede Methode in einer Schnittstelle ist außerdem implizit abstrakt, sodass das Schlüsselwort abstract 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 vorstellen, dass die Klasse einen Vertrag unterzeichnet und zustimmt, die spezifischen Verhaltensweisen der Schnittstelle auszuführen. Wenn eine Klasse nicht alle Verhaltensweisen der Schnittstelle ausführt, muss die Klasse sich selbst als abstrakt deklarieren.
Eine Klasse verwendet die Implementierungen Schlüsselwort zum Implementieren einer Schnittstelle. Das Schlüsselwort implements erscheint in der Klassendeklaration nach dem erweiterten Teil der Deklaration.
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 wird das folgende Ergebnis erzeugen −
Ausgabe
Mammal eats Mammal travels
Beim Überschreiben von Methoden, die in Schnittstellen definiert sind, müssen einige Regeln befolgt werden −
-
Geprüfte Ausnahmen sollten nicht für andere Implementierungsmethoden deklariert werden als die, die von der Interface-Methode deklariert wurden, oder Unterklassen von denen, die von der Interface-Methode deklariert wurden.
-
Beim Überschreiben der Methoden sollten die Signatur der Schnittstellenmethode und derselbe Rückgabetyp oder Untertyp beibehalten werden.
-
Eine Implementierungsklasse selbst kann abstrakt sein, und wenn ja, müssen Schnittstellenmethoden nicht implementiert werden.
Bei Implementierungsschnittstellen gibt es mehrere Regeln −
-
Eine Klasse kann mehr als eine Schnittstelle gleichzeitig implementieren.
-
Eine Klasse kann nur eine Klasse erweitern, aber viele Interfaces implementieren.
-
Eine Schnittstelle kann eine andere Schnittstelle erweitern, ähnlich wie eine Klasse eine andere Klasse erweitern kann.
Erweiternde Schnittstellen
Eine Schnittstelle kann eine andere Schnittstelle auf die gleiche Weise erweitern, wie eine Klasse eine andere Klasse erweitern kann. Die erweitert Das Schlüsselwort wird verwendet, um eine Schnittstelle zu erweitern, und die untergeordnete Schnittstelle erbt die Methoden der übergeordneten Schnittstelle.
Das folgende Sport-Interface wird um Hockey- und Fußball-Interfaces 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); }
Das Hockey-Interface hat vier Methoden, aber es erbt zwei von Sports; Daher muss eine Klasse, die Hockey implementiert, alle sechs Methoden implementieren. Ebenso muss eine Klasse, die Football implementiert, die drei Methoden von Football und die zwei Methoden von Sports definieren.
Mehrere Schnittstellen erweitern
Eine Java-Klasse kann nur eine Elternklasse erweitern. Mehrfachvererbung ist nicht erlaubt. Schnittstellen sind jedoch keine Klassen, und eine Schnittstelle kann mehr als eine übergeordnete Schnittstelle erweitern.
Das Schlüsselwort extend wird einmal verwendet, und die übergeordneten Schnittstellen werden in einer durch Kommas getrennten Liste deklariert.
Wenn die Eishockey-Schnittstelle beispielsweise sowohl Sport als auch Ereignis erweitert, würde sie als −
deklariert werdenBeispiel
public interface Hockey extends Sports, Event
Tagging-Schnittstellen
Die häufigste Verwendung zum Erweitern von Schnittstellen tritt auf, wenn die übergeordnete Schnittstelle keine Methoden enthält. Die MouseListener-Schnittstelle im java.awt.event-Paket hat beispielsweise java.util.EventListener erweitert, die als −
definiert istBeispiel
package java.util; public interface EventListener {}
Eine Schnittstelle ohne darin enthaltene Methoden wird als Tagging bezeichnet Schnittstelle. Es gibt zwei grundlegende Designzwecke für Tagging-Schnittstellen −
Erstellt ein gemeinsames übergeordnetes Element − Wie bei der EventListener-Schnittstelle, die durch Dutzende anderer Schnittstellen in der Java-API erweitert wird, können Sie eine Tagging-Schnittstelle verwenden, um ein gemeinsames übergeordnetes Element in einer Gruppe von Schnittstellen zu erstellen. Wenn beispielsweise eine Schnittstelle EventListener erweitert, weiß die JVM, dass diese bestimmte Schnittstelle in einem Ereignisdelegierungsszenario verwendet wird.
Fügt einer Klasse einen Datentyp hinzu − Aus dieser Situation stammt der Begriff Tagging. 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.
Java