Das Konzept und die Verwendung von Java -Schnittstelle <br /> In einer abstrakten Klasse können eine oder mehrere abstrakte Methoden aufgenommen werden.
Das Schnittstellenschlüsselwort wird deklariert, das als spezielle abstrakte Klasse angesehen werden kann, die angibt, was eine Klasse tun muss, anstatt anzugeben, wie sie es tut.
Es gibt auch viele Beispiele für Schnittstellen in der Realität, wie z. B. serielle Computer -Festplatten. Das serielle ATA -Komitee ist nicht für die Erzeugung von Festplatten verantwortlich, sondern legt nur gemeinsame Spezifikationen fest.
Seagate, Hitachi, Samsung und andere Hersteller produzieren Festplatten, die die Schnittstelle entsprechend den Spezifikationen erfüllen, und diese Festplatten können verallgemeinert werden. 320G Seagate Serial Festplatte und installieren Sie sie.
Der folgende Code kann das serielle ATA -Komitee simulieren, um die folgende serielle Festplattenschnittstelle zu definieren:
// serielle Festplattenschnittstelle öffentliche Schnittstelle SATAHDD {// Anzahl der Verbindungslinien öffentliche statische Int Connect_line = 4;HINWEIS: Die in der Schnittstelle deklarierten Mitgliedsvariablen sind standardmäßig alle öffentliche statische endgültige und müssen initialisiert werden. Daher können diese Modifikatoren beim Deklarieren von Konstanten weggelassen werden.
Schnittstellen sind eine Sammlung mehrerer Konstanten und abstrakter Methoden, die derzeit den abstrakten Klassen ähneln. In der Tat haben Schnittstellen sich aus abstrakten Klassen entwickelt. Sofern nicht anders angegeben, genießen Schnittstellen dieselbe "Behandlung" wie Klassen. Beispielsweise können im Quellprogramm mehrere Klassen oder Schnittstellen definiert werden, aber höchstens eine öffentliche Klasse oder Schnittstelle können verfügbar sein. Wie das Vererbungsformat einer Klasse können auch Schnittstellen vererbt werden, und Subinterfaces können Konstanten und abstrakte Methoden in der übergeordneten Schnittstelle erben und neue abstrakte Methoden usw. hinzufügen.
Die Schnittstelle hat jedoch ihre eigenen Eigenschaften, die wie folgt zusammengefasst sind.
1) In der Schnittstelle können nur abstrakte Methoden definiert werden. Der Versuch, Instanzvariablen, nicht abstrakte Instanzmethoden und statische Methoden in einer Schnittstelle zu definieren, sind alle illegal. Zum Beispiel:
öffentliche Schnittstelle SATAHDD {// Die Anzahl der Verbindungsleitungen öffentliche Int ConnectLine; Seien Sie public type // Data Lesen Sie öffentliche statische String -Readdata () {// Kompilierungsfehler, die Schnittstelle kann keine statische Methode zurückgeben "Daten";3) Es gibt keinen Konstruktor in der Schnittstelle und kann nicht instanziiert werden.
4) Eine Schnittstelle implementiert keine andere Schnittstelle, kann jedoch mehrere andere Schnittstellen erben. Die Multi-Inheritanz-Funktion der Schnittstelle macht das einzelne Vererbung der Klasse aus. Zum Beispiel:
// Serielle Festplattenschnittstelle öffentliche Schnittstelle SATAHDD erweitert A, B {// Anzahl der Verbindungslinien öffentlich statische Int Connect_line = 4; ;} Schnittstelle A {public void a ();Warum Schnittstelle verwenden?
In groß angelegten Projektentwicklung kann es erforderlich sein, eine Klasse aus der Mitte der Erbungskette einzufügen, damit der Unterklassen bestimmte Funktionen haben, ohne ihre übergeordneten Klassen zu beeinflussen. Zum Beispiel ist A -> B -> C -> D -> E eine Vorfahrklasse. Klasse. Das Problem ist jedoch, dass Java eine einzelne Vererbungssprache ist. Auf diese Weise wirken sich die Modifikationen zu C, D und E -Klassen auf die gesamte Vererbungskette aus und sind nicht steckbar.
Die Schnittstelle ist eine Garantie für die Einlage. Jede Klasse in einer Vererbungskette kann eine Schnittstelle implementieren, die alle Unterklassen dieser Klasse beeinflusst, jedoch keine übergeordnete Klasse dieser Klasse beeinflusst. Solche Klassen müssen die von dieser Schnittstelle angegebenen Methoden implementieren, und Unterklassen können diese Methoden automatisch aus dieser Klasse erben, und zu diesem Zeitpunkt sind diese Unterklassen steckbar.
Was uns wichtig ist, ist keine bestimmte Klasse, sondern ob diese Klasse die von uns benötigte Schnittstelle implementiert.
Die Schnittstelle bietet Interpolations- und Methodenaufrufe.
Schnittstellen spielen eine wichtige Rolle bei der objektorientierten Java-Programmierung. Tatsächlich besteht eine der wichtigsten Aufgaben in der Entwurfsphase darin, die Schnittstellen jedes Teils zu entwerfen und dann die grundlegende Rahmenstruktur des Programms durch die Kombination von Schnittstellen zu bilden.
Verwendung von Schnittstellen
Die Verwendung von Schnittstellen unterscheidet sich etwas von dem der Klassen. Wenn Sie eine Klasse verwenden müssen, wird das neue Schlüsselwort direkt verwendet, um eine Instanz einer Klasse zu erstellen. Die Schnittstelle kann jedoch nicht wie diese verwendet werden, da die Schnittstelle das neue Schlüsselwort nicht direkt verwenden kann, um eine Instanz zu erstellen.
Eine Schnittstelle muss ihre abstrakten Methoden über eine Klasse implementieren und dann die Klasse instanziieren. Das Schlüsselwort der Klassenimplementierungsschnittstelle ist implementiert.
Wenn eine Klasse nicht alle abstrakten Methoden der Schnittstelle implementieren kann, muss die Klasse als abstrakte Methode definiert werden.
Eine Instanz einer Schnittstelle darf nicht erstellt werden, aber eine Referenzvariable des Schnittstellentyps darf definiert werden, was auf eine Instanz der Klasse hinweist, die die Schnittstelle implementiert.
Eine Klasse kann nur eine übergeordnete Klasse erben, aber mehrere Schnittstellen implementieren.
Das Format der Implementierungsschnittstelle lautet wie folgt:
Der Name der Modifikatorklasse erweitert die übergeordnete Klasse implementiert mehrere Schnittstellen {{
Implementierungsmethode
}
Bitte beachten Sie das folgende Beispiel:
statische Java.Lang.System Samsung Festplatte}} // serielle Festplattenschnittstelle SATAHDD {// Anzahl der Verbindungsleitungen öffentlich statische Int Connect_line = 4; }// Reparaturfest -Disk -Schnittstelle FixHdd {// Reparaturadress String Adress = "Haidian District, Peking"; String readdata () {return "Daten"; // Samsung Class Samsunghdd implementiert satahdd {// Samsung Festplatte readdata () {return "data"; Eine schlechte Festplatte kann keine Daten schreiben.Verwenden Sie die Schnittstelle als Typ
Die Schnittstelle wird als Referenztyp verwendet. Stellen Sie fest, dass die Verwendung der Klassenmethode tatsächlich die entsprechende Methode für Implementierungsklassen aufgerufen wird.
Beispiele sind wie folgt:
öffentliche Klasse {public void test1 (a) {a.dosth (); a); Auslaufergebnisse:
jetzt in b
Wie Sie sehen, können Schnittstellen als Typ verwendet werden, wobei Schnittstellen als Methodenparameter und Rückgabetypen verwendet werden.
Der Unterschied zwischen Java -Schnittstelle und abstrakter Klasse <BR /> Klassen sind Objektvorlagen, und abstrakte Klassen und Schnittstellen können als Vorlagen von konkreten Klassen angesehen werden.
Da Grenzflächen aus einer bestimmten Perspektive eine spezielle abstrakte Klasse sind, haben sie eine tiefe Verbindung und haben große Ähnlichkeiten. Daher ist es leicht, verwirrt zu sein, wen Sie verwenden müssen. Wir analysieren zunächst die Ähnlichkeiten, die sie haben.
Sie alle repräsentieren abstrakte Schichten von baumartigen Strukturen. Versuchen Sie bei der Verwendung von Referenzvariablen, die abstrakte Ebene der Klassenstruktur zu verwenden, um die Definition und Implementierung der Methode zu trennen.
Keiner von ihnen kann instanziiert werden.
Alle können abstrakte Methoden enthalten. Abstrakte Methoden werden verwendet, um zu beschreiben, welche Funktionen das System bietet, ohne sich um bestimmte Implementierungen zu kümmern.
Sprechen wir über die Hauptunterschiede zwischen abstrakten Klassen und Schnittstellen.
1) Abstrakte Klassen können implementiert werden, um wiederholte Implementierungen dieser Methoden in Unterklassen zu vermeiden und die Wiederverwendbarkeit von Code zu verbessern.
public abstract a {public abstract void methode1 (); method1 () {// c method1}}Abstract Class A enthält zwei Unterklassen B und C. Da A die Implementierung von Method -Methode2 enthält, muss die Methode2 -Methode in Unterklassen B und C nicht umschreiben Verhalten von Unterklassen. Method2 ist ein Beispiel für den wiederverwendbaren Code. A definiert nicht die Implementierung von Methode1, dh B und C können die Methode1 -Methode nach ihren eigenen Merkmalen implementieren, was die Eigenschaften der losen Kopplung widerspiegelt.
Ändern Sie es in die Schnittstelle und sehen Sie:
öffentliche Schnittstelle A {public void method1 (); Implementiert eine {public void method1 () {// c method1} public void method2 () {// c method2}}Die Schnittstelle A kann keine öffentlichen Funktionen für die Implementierung von Klassen B und C bereitstellen, was bedeutet, dass A das Verhalten von B und C nicht einschränken kann B und C können ihre Eigenschaften und realistischen Methoden und Methoden Methoden frei ausüben, und die Schnittstelle A hat keine Kontrollfähigkeit.
2) Eine Klasse kann nur eine direkte übergeordnete Klasse (möglicherweise eine abstrakte Klasse) erben, aber eine Klasse kann mehrere Schnittstellen implementieren, was der Vorteil der Schnittstelle ist.
Schnittstelle A {public void method2 ();} Schnittstelle B {public void method1 ();} Klasse C Implementiert A, B {public void methode1 () {// c Method1} publy void methode2 () {// c method2} } // C kann so flexibel verwendet werden, und C hat die Möglichkeit, andere Schnittstellen zu erweitern und zu implementieren. A = neu C (); Klasse B erweitert ein {public abstract void method2 ();} Klasse C erweitert B {public void method1 () {// c Methodus} public void methode2 () {// c Method2}}Für Klasse C besteht keine Chance, andere übergeordnete Klassen zu erben.
Zusammenfassend haben Schnittstellen und abstrakte Klassen ihre eigenen Vor- und Nachteile.
Das Verhaltensmodell sollte immer durch Schnittstellen und nicht durch abstrakte Klassen definiert werden, sodass Schnittstellen normalerweise bevorzugt werden und abstrakte Klassen so wenig wie möglich verwendet werden sollten.
Bei der Auswahl einer abstrakten Klasse ist es normalerweise die folgende Situation: Sie müssen das Verhalten der Unterklasse definieren und allgemeine Funktionen für die Unterklasse bereitstellen.