JavaRush /Java-Blog /Random-DE /Was sind Schnittstellen?
fog
Level 18

Was sind Schnittstellen?

Veröffentlicht in der Gruppe Random-DE
Eine Schnittstelle ist ein öffentlicher, allgemein akzeptierter Vertrag (Vereinbarung), der ein bestimmtes Verhalten beschreibt. Wofür werden sie benötigt? Nehmen wir zum Beispiel an, wir haben einen Link, der auf eine Liste mit Zeichenfolgen verweist. Nehmen wir an, dass dieser Liste zu Beginn viele Elemente hinzugefügt werden und dann die gesamte Liste einmal verarbeitet wird. Nehmen wir an, wir entscheiden uns, der bekannten Empfehlung zu folgen und die Klasse zu verwendenArrayList:
ArrayList<String> list = new ArrayList<>();
Wir haben ein Programmverhalten in 100.500 Codezeilen geschrieben, das diese Liste von Zeichenfolgen verwendet, und klassenspezifische Methoden verwendet, um die Leistung zu optimieren ArrayList. Zum Beispiel secureCapacity() . Solange die Zeilen am Ende der Liste hinzugefügt werden, funktioniert alles einwandfrei und schnell. Aber jetzt müssen wir unser Programm auf eine etwas andere Art von Arbeit umorientieren, bei der Zeilen hauptsächlich am Anfang der Liste hinzugefügt werden. Für diese Art von Belastung ist es deutlich besser geeignet LinkedList. Aber wenn wir unser Programm mit 100.500 Codezeilen auf Schienen übersetzen wollen LinkedList, müssen wir die Verwendung bestimmter ArrayListMethoden finden und entfernen, die möglicherweise an manchen Stellen die Logik einzelner Abschnitte des Programms stark verändern. Wenn wir nur die Methoden verwenden würden, die sowohl in ArrayList, als auch in verfügbar sind LinkedList, müssten wir dies nicht tun. Wir könnten nur eine Codezeile ändern – die Listendeklaration:
LinkedList<String> list = new LinkedList<>();
Wir können feststellen, dass es bequemer wäre, die Deklaration gemeinsamer Methoden für diese Klassen in einer Vorfahrenklasse zu platzieren, möglicherweise beispielsweise abstrakt AbstractList. In diesem Fall könnten wir unsere Liste wie folgt deklarieren:
AbstractList<String> list = new ArrayList<>();
Und wir könnten die Implementierung schnell so ändern:
AbstractList<String> list = new LinkedList<>();
Aber in diesem Fall sind die Klassen, die wir in unserem Programm verwenden können, nur auf die Nachkommen der Klasse beschränkt AbstractList, auch wenn es geeignetere Klassen gibt, die nicht Nachkommen der Klasse sind AbstractList, aber dieselben Methoden mit demselben Verhalten haben. Was soll ich machen? Aus diesem Grund wurden Schnittstellen erfunden . Eine Schnittstelle ist eine Konvention über eine Reihe von Methoden und deren Verhalten, auf die sich völlig unabhängige Klassen festlegen können, sodass jede von ihnen durch eine einzige Referenz referenziert werden kann. Zum Beispiel so:
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
Auch wenn Klassen keine gemeinsamen Vorfahrenklassen AnotherListClasshaben , ArrayListaußer . Ein gutes Beispiel für eine Schnittstelle ist die Lenkung eines Autos – ein Auto hat ein Lenkrad, Pedale und ein Getriebe. In der überwiegenden Mehrheit der Autos folgen diese Elemente derselben Verhaltenskonvention. Wenn Sie beispielsweise das Lenkrad gegen den Uhrzeigersinn drehen, biegt das Auto unabhängig von der Marke nach links ab, anstatt schneller zu werden. Wenn Sie wissen, wie man diese Bedienelemente verwendet, können Sie problemlos mit jedem Auto umgehen, unabhängig von Modell, Baujahr, Marke oder Motortyp. Darüber hinaus kann man sich eine Situation vorstellen, in der ein völlig anderes Transportmittel (z. B. ein Raumschiff) über dieselbe Steuerungsschnittstelle verfügt wie Autos. Wenn Sie wissen, wie man ein Auto fährt, und sich auf dem Pilotensitz eines solchen Schiffes wiederfinden, können Sie vermeiden, sich in dieser Situation zu verirren. Wiederholen wir es noch einmal:LinkedListObject
  • Eine Schnittstelle ist ein Vertrag (Vereinbarung) über das Verhalten.
  • Viele Klassen, auch solche, die nicht durch Vererbung miteinander verbunden sind, können erklären, dass sie sich mit der Einhaltung dieses Vertrags (Schnittstellenimplementierung) einverstanden erklären.
  • Das Platzieren der Verhaltensbeschreibung in einer separaten Schnittstelle ist sehr praktisch, da es die Flexibilität des Codes erhöht und es Ihnen ermöglicht, die Implementierung (Klasse, die die Schnittstelle implementiert) der Schnittstelle auf Klassen umzustellen, die nicht durch Vererbung miteinander verbunden sind.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION