Dieser Artikel beschreibt die Verwendung von Java -Schnittstellen und abstrakten Klassen. Teilen Sie es für Ihre Referenz wie folgt weiter:
Schnittstelle
1 Da Java nicht mehrfacher Vererbung unterstützt, kann eine Klasse nur eine übergeordnete Klasse erben, sondern mehrere Schnittstellen implementieren, und die Schnittstelle selbst kann auch mehrere Schnittstellen erben.
2 Die Mitgliedsvariablen in der Schnittstelle sind standardmäßig vom öffentlichen statischen endgültigen Typ. Initialisierung, die angezeigt werden muss.
3 Die Methoden in der Schnittstelle sind standardmäßig von öffentlichem Zusammenfassung. Implizite Erklärung.
4 Die Schnittstelle hat keinen Konstruktor und kann nicht instanziiert werden.
5 Eine Schnittstelle kann keine andere Schnittstelle implementieren, sondern kann mehrere Schnittstellen erben.
6 Wenn eine Klasse eine Schnittstelle implementiert, müssen alle abstrakten Methoden in der Schnittstelle implementiert werden, andernfalls muss die Klasse als abstrakte Klasse definiert werden.
Zusammenfassung Klasse
1 Wenn eine Klasse als abstrakt deklariert wird, kann diese Klasse keine Objekte erzeugen und kann nur vererbt werden.
2 Abstrakte Methoden müssen in abstrakten Klassen existieren.
3 Es kann allgemeine Variablen und allgemeine Methoden in abstrakten Klassen geben.
4 Unterklassen erben eine abstrakte Klasse muss ihre abstrakten Methoden implementieren, es sei denn, die Unterklasse ist eine abstrakte Klasse.
private void print () {}; Diese Anweisung repräsentiert die leere Implementierung der Methode.
abstrakter void print (); Diese Aussage stellt die Abstraktion der Methode ohne Implementierung dar.
Der Unterschied zwischen Schnittstelle und abstrakter Klasse
1 Die Schnittstelle kann nur abstrakte Methoden enthalten, und abstrakte Klassen können normale Methoden enthalten.
2 Die Schnittstelle kann nur statische konstante Eigenschaften definieren. Abstrakte Klassen können sowohl gewöhnliche Eigenschaften als auch statische konstante Eigenschaften definieren.
3 Die Schnittstelle enthält keine Konstruktormethoden, und abstrakte Klassen können Konstruktormethoden enthalten.
Die abstrakte Klasse kann nicht instanziiert werden, bedeutet jedoch nicht, dass sie keinen Konstruktor haben kann. Die abstrakte Klasse kann einen Konstruktor haben und ist eine Ersatzklasse.
1 Die Schnittstelle ist der Kern, der definiert, was zu tun ist, und viele Methoden enthält, aber nicht definiert, wie diese Methoden durchgeführt werden sollen.
2 Wenn viele Klassen eine Schnittstelle implementieren, muss jede von ihnen diese Methoden im Code implementieren.
3 Wenn die Implementierungen einiger Klassen etwas gemeinsam haben, kann eine abstrakte Klasse abstrahiert werden, damit die abstrakte Klasse den gemeinsamen Code der Schnittstelle implementiert, während diese personalisierten Methoden von jeder Unterklasse implementiert werden.
Daher sind abstrakte Klassen entwickelt, um die Implementierung von Schnittstellen zu vereinfachen. Sie bieten nicht nur die Implementierung öffentlicher Methoden, sondern ermöglichen es Ihnen, sich schnell zu entwickeln, sondern auch Ihren Klassen, alle Methoden selbst ohne enge Kopplungsprobleme implementieren.
Die Anwendung ist sehr einfach
1. Definieren Sie zuerst Schnittstellen
2 Wenn es mehrere Schnittstellenimplementierungen gibt, die gemeinsame Teile haben, verwenden Sie abstrakte Klassen und integrieren sie.
Der Unterschied zwischen Schnittstelle und abstrakter Klasse-I glaube, dass Sie nach dem Lesen nicht verwechselt werden werden
Ich denke, für Programmierer, die objektorientierte Programmiersprachen verwenden, muss der Begriff "Schnittstelle" vertraut sein, aber ich frage mich, ob Sie solche Zweifel haben: Was ist der Zweck einer Schnittstelle? Was ist der Unterschied zwischen ihm und abstrakten Klassen? Können abstrakte Klassen anstelle von Schnittstellen verwendet werden? Darüber hinaus müssen Sie als Programmierer oft den Ausdruck "Schnittstellenorientierte Programmierung" hören. Was bedeutet das? Was ist die ideologische Konnotation? Wie ist die Beziehung zur objektorientierten Programmierung? Dieser Artikel beantwortet diese Fragen nacheinander.
1. In welchem Zusammenhang zwischen interfadenorientierter Programmierung und objektorientierter Programmierung
Zunächst sind interface-orientierte Programmierungen und objektorientierte Programmierung nicht horizontal. Es ist keine unabhängige Programmierungsidee, die fortgeschrittener als objektorientierte Programmierung ist, sondern dem objektorientierten Denksystem angeschlossen ist und zu seinem Teil gehört. Mit anderen Worten, es ist eine der Wesen des Denkens in objektorientierten Programmiersystemen.
2. Die Art der Schnittstelle
Eine Schnittstelle ist angeblich aus mehreren Methodendefinitionen ohne Körpercode. Es hat einen eindeutigen Namen und kann von einer Klasse oder einer anderen Schnittstelle implementiert werden (oder kann auch als vererbt werden). Es könnte wie Folgendes in Form aussehen:
Schnittstelle interfacename {void methode1 (); void Method2 (int para1); void method3 (String para2, String para3); }Also, was ist die Essenz einer Schnittstelle? Oder was bedeutet die Existenz einer Schnittstelle? Ich denke, es kann aus den folgenden zwei Perspektiven berücksichtigt werden:
1) Eine Schnittstelle ist eine Reihe von Regeln, die eine Reihe von Regeln festlegen, die eine Klasse oder Schnittstelle, die diese Schnittstelle implementiert, haben muss. Es verkörpert das Konzept der Natur, dass "wenn Sie ... Sie müssen in der Lage sein ..."
Zum Beispiel können Menschen in der Natur essen, das heißt: "Wenn Sie ein Mensch sind, müssen Sie in der Lage sein, essen zu können." Wenn dann in einem Computerprogramm simuliert wird, sollte es eine IPerson -Schnittstelle mit dem Schnittstellennamen mit der Schnittstelle mit der "I") geben, und es gibt eine Methode namens Eat (). Dann sehen wir, dass jede Klasse, die "Mensch" repräsentiert, die IPerson -Schnittstelle implementieren muss, die die natürliche Regel von "Wenn Sie ein Mensch sind, müssen Sie in der Lage sein, essen zu können".
Von hier aus denke ich, dass Sie auch einige objektorientierte Ideen sehen können. Eine der Kerne des objektorientierten Denkens ist es, die reale Welt und die abstrakten Dinge in der realen Welt in Kategorien zu simulieren. Das gesamte Programm basiert auf Fällen verschiedener Typen, die miteinander kommunizieren und miteinander zusammenarbeiten, um die Systemfunktionen zu vervollständigen. Dies steht im Einklang mit den Betriebsbedingungen der realen Welt und ist auch die Essenz des objektorientierten Denkens.
2) Schnittstellen sind abstrakte Darstellungen ähnlicher Dinge in einer bestimmten detaillierten Ansicht. Beachten Sie, dass ich hier auf eine bestimmte detaillierte Sichtweise betone, da das Konzept von "gleicher Sache" relativ ist und aufgrund unterschiedlicher körniger Ansichten unterschiedlich ist.
Zum Beispiel bin ich in meinen Augen eine Person, und es gibt einen grundlegenden Unterschied zwischen mir und einem Schwein. Ich kann die Aussage akzeptieren, dass meine Klassenkameraden und ich gleich sind, aber ich darf nicht akzeptieren, dass ich genauso wie ein Schwein bin. Wenn jedoch die Augen eines Zoologie wie Schweine sind, sollte ich gleich sein, weil wir beide Tiere sind, kann er denken, dass sowohl "menschliches" als auch "Schwein" die Ianimal -Schnittstelle implementiert haben. Wenn er ein Tierverhalten studiert, wird er mich und Schweine nicht getrennt behandeln, sondern es aus der größeren Partikelgröße von "Tier" untersuchen, aber er wird denken, dass es einen wesentlichen Unterschied zwischen mir und einem Baum gibt.
Jetzt, wo ich mich zu einem Genetiker verwandelt habe, ist die Situation anders. Da alle Lebewesen in seinen Augen geerbt werden können, unterscheidet ich mich nicht nur nicht nur von Schweinen, sondern auch von einer Mücke, einem Bakterien, einem Baum, einem Pilz oder sogar einem SARS -Virus, weil er denken würde, wir hätten alle die identifizierbare Schnittstelle (Anmerkung: Nachab VI. Erbe). Er wird uns nicht separat studieren, sondern alle Lebewesen als ähnliche Typen studieren. In seinen Augen gibt es keinen Unterschied zwischen Menschen und Viren, nur vererbbare Substanzen und nicht verarbeitbare Substanzen. Aber zumindest gibt es immer noch einen Unterschied zwischen mir und einem Stein.
Aber leider erschien eines Tages ein großer Mann auf der Erde namens Lenin. Nachdem er mit Max und Engels 'Meisterwerk des dialektischen Materialismus vertraut war, hatte er viel Erfahrung und gab eine berühmte Definition: Die sogenannte Materie ist eine objektive Realität, die sich vom Bewusstsein widerspiegeln kann. Zu diesem Zeitpunkt unterscheidet ich mich nicht mehr von einem Stein, einer Spur aus Luft, einer Idiom und dem elektromagnetischen Feld, das Mobiltelefonsignale überträgt, da wir in Lenins Augen alle objektive Realität sind, die sich vom Bewusstsein widerspiegeln können. Wenn Lenin ein Programmierer wäre, würde er Folgendes sagen: Die sogenannte Angelegenheit sind die Instanzen, die von allen Klassen generiert wurden, die die beiden Schnittstellen "ireflectabe" und "iesse" implementieren. (Hinweis: Reflect v. Reflect esse n. Objektive Realität)
Vielleicht werden Sie denken, dass mein obiger Beispiel Unsinn ist, aber dies ist genau die Bedeutung der Schnittstelle. Eine der objektorientierten Ideen und der Kern ist der Polymorphismus. Was ist Polymorphismus? Um es unverblümt auszudrücken, es geht darum, ähnliche Dinge wahllos auf einem bestimmten Granularansichtsniveau zu behandeln und gleichmäßig umzugehen. Und der Grund, warum ich es wage, dies zu tun, ist, dass es eine Schnittstelle gibt. Wie dieser Genetiker verstand er, dass alle Organismen die idescendierbare Schnittstelle implementiert haben. Solange sie Organismen sind, muss es die DEM -Methode () geben, sodass er sie auf einheitliche Weise untersuchen kann, ohne jeden Organismus getrennt und schließlich anstrengend zu untersuchen.
Vielleicht können wir Ihnen keinen intuitiven Eindruck der Natur und Funktion der Schnittstelle geben. In den folgenden Beispielen und der Analyse mehrerer Entwurfsmuster erfahren Sie dann die Konnotation der Schnittstelle intuitiver.
3.. Schnittstellenorientierte Programmierzusammenfassung
In dem obigen Artikel denke ich, dass Sie ein Verständnis für die ideologische Konnotation von Schnittstellen und Schnittstellen haben. Was ist also interface-orientierte Programmierung? Meine persönliche Definition lautet: In der Systemanalyse und Architektur unterscheiden wir Hierarchien und Abhängigkeiten. Jede Stufe bietet nicht direkt Dienste für ihre obere Schicht (dh in der oberen Schicht nicht direkt instanziiert), sondern definiert stattdessen eine Reihe von Schnittstellen, wobei nur ihre Schnittstellenfunktionen der oberen Schicht ausgesetzt sind. Die obere Schicht hängt nur von der unteren Schicht ab und beruht nicht auf bestimmte Klassen.
Die Vorteile davon sind offensichtlich, und zunächst ist es für die Systemflexibilität sehr vorteilhaft. Wenn die untere Schicht geändert werden muss, solange die Schnittstellen- und Schnittstellenfunktionen unverändert bleiben, muss die obere Schicht keine Änderungen vornehmen. Sie können die untere Schicht sogar ersetzen, ohne den Code der oberen Ebene zu ändern, genau wie wir eine WD 60G -Festplatte durch eine Seagate 160G -Festplatte ersetzen. Es besteht keine Notwendigkeit, in anderen Teilen des Computers Änderungen vorzunehmen, sondern nur die ursprüngliche Festplatte abzuziehen und die neue Festplatte anzuschließen, da die anderen Teile des Computers nicht auf die spezifische Festplatte beruhen, sondern nur auf eine IDE -Schnittstelle beruhen. Solange die Festplatte diese Schnittstelle implementiert, kann sie ersetzt werden. Von hier aus ist die Schnittstelle im Programm der Schnittstelle in der Realität sehr ähnlich, daher habe ich immer geglaubt, dass die Wortschnittstelle wirklich ähnlich ist!
Ein weiterer Vorteil der Verwendung von Schnittstellen besteht darin, dass Entwickler verschiedener Komponenten oder Ebenen parallel mit dem Bau beginnen können, genau wie diejenigen, die Festplatten bauen, keine CPUs oder Monitore herstellen müssen. Solange die Schnittstellen konsistent sind und das Design vernünftig ist, kann die Entwicklung parallel durchgeführt werden, wodurch die Effizienz verbessert wird.
Dieser Artikel wird zuerst hierher kommen. Schließlich möchte ich etwas anderes sagen: Die Essenz objektorientiert ist es, die Realität zu simulieren, die auch als die Seele meines Artikels bezeichnet werden kann. Daher wird es von großem Nutzen sein, mehr über objektorientierte Dinge aus der Realität nachzudenken, um die Systemanalyse- und Entwurfsfunktionen zu verbessern.
Im nächsten Artikel werde ich ein Beispiel verwenden, um die grundlegenden Methoden der Schnittstellenprogrammierung anzuzeigen.
Im dritten Artikel werde ich einige interface-orientierte Programmierideen im klassischen Designmuster analysieren und die interface-orientierten Ideen in der hierarchischen .NET-Architektur analysieren.
Ergänzung zu diesem Artikel:
Nachdem ich Ihre Antworten sorgfältig gelesen habe, freue ich mich sehr, technische Probleme mit Ihnen zu besprechen. Vielen Dank an Ihre Freunde, die Bestätigung gegeben haben, und auch an Ihre Freunde, die Meinungen und Fragen vorgelegt haben, die mich dazu veranlassten, tiefer über etwas nachzudenken und zu hoffen, dass ich durchführte. Hier möchte ich etwas hinzufügen, um einige der konzentrierten Probleme in den Antworten zu besprechen.
1. In Bezug auf die zwei Wörter "Schnittstelle" in "Schnittstellenorientierter Programmierung" und die spezifische objektorientierte Sprache "Schnittstelle"
Ich habe einen Freund gesehen, der vorschlug, dass das Wort "Schnittstelle" in der "interface orientierten Programmierung" einen größeren Bereich als die Schnittstelle in einer einfachen Programmiersprache haben sollte. Nachdem ich darüber nachgedacht hatte, dachte ich, es machte Sinn. Was ich hier geschrieben habe, ist in der Tat unangemessen. Ich denke, "Schnittstelle" in objektorientierter Sprache bezieht sich auf eine bestimmte Codestruktur, z. B. eine in C# definierte Schnittstelle mit dem Schlüsselwort der Schnittstelle. Die "Schnittstelle" in "interface-orientierter Programmierung" kann als strukturelle Komponente bezeichnet werden, die sich aus der Perspektive der Softwarearchitektur und aus einer abstrakteren Ebene auf eine abstraktere Ebene bezieht. Wenn eine abstrakte Klasse definiert ist und der Zweck darin besteht, Polymorphismus zu erreichen, ist es für vernünftig, diese abstrakte Klasse auch "Schnittstelle" zu bezeichnen. Aber ist es vernünftig, abstrakte Klassen zur Implementierung des Polymorphismus zu verwenden? Im zweiten Artikel unten diskutieren.
Zusammenfassend denke ich, dass die Konzepte von zwei "Schnittstellen" sowohl unterschiedlich als auch miteinander verbunden sind. Schnittstellen in der "interface-orientierten Programmierung" sind architektonische Komponenten auf ideologischer Ebene zur Realisierung von Polymorphismus, Verbesserung der Flexibilität und Wartbarkeit von Software, während "Schnittstellen" in bestimmten Sprachen die Mittel sind, um Komponenten in dieser Idee in Code zu implementieren.
2. über abstrakte Klassen und Schnittstellen
Ich habe gesehen, dass dies in der Antwort ein intensiveres Problem war. Entschuldigung, ich habe in dem Artikel nicht gut über dieses Problem nachgedacht. Mein persönliches Verständnis für dieses Thema ist wie folgt:
Wenn wir uns den spezifischen Code allein ansehen, sind diese beiden Konzepte leicht zu verschwimmen, und wir glauben sogar, dass die Schnittstelle überflüssig ist, da aus der spezifischen Funktion allein aus der spezifischen Funktion (C#in Java) abstrakte Klassen mit Ausnahme mehrerer Vererbung (C#in Java) die Schnittstellen vollständig ersetzen können. Ist jedoch die Existenz von Schnittstellen, um mehrfacher Vererbung zu erreichen? Natürlich nicht. Ich denke, der Unterschied zwischen abstrakten Klassen und Schnittstellen ist die Motivation zu verwenden. Die Verwendung abstrakter Klassen ist für die Wiederverwendung von Code dient, während die Motivation für die Verwendung von Schnittstellen für Polymorphismus ist. Wenn Sie also zögern, irgendwo eine Schnittstelle oder eine abstrakte Klasse zu verwenden, können Sie darüber nachdenken, was Ihre Motivation ist.
Wenn ich die Zweifel eines Freundes an der IPerson -Schnittstelle sieht, ist mein persönliches Verständnis, ob die IPerson -Schnittstelle definiert werden sollte, die von der spezifischen Anwendung abhängt. Wenn es Frauen und ein Mann in unserem Projekt gibt, sowohl die Erbenperson als auch die meisten Methoden von Frauen und Mann sind gleich, und es gibt nur eine Methode, dosomethinginwc () ist unterschiedlich (das Beispiel ist vulgär, bitte vergib mir). Dann ist es natürlich vernünftiger, eine abstrakte Abstract -Klasse zu definieren, da es sich nur um eine andere Methode handelt. Code.
Wenn die Frauen- und Mannklassen in unserem Programm jedoch im Grunde keinen gemeinsamen Code haben und es eine PersonHandle -Klasse gibt, die sie instanziieren muss und nicht wissen möchte, ob sie Männer oder Frauen sind, sondern sie nur als Menschen behandeln und Polymorphismus umsetzen, dann ist es notwendig, sie als Schnittstellen zu definieren.
Kurz gesagt, der Unterschied zwischen einer Schnittstelle und einer abstrakten Klasse ist hauptsächlich auf die Motivation für die Verwendung zurückzuführen, nicht selbst. Wenn etwas als abstrakte Klasse oder Schnittstelle definiert werden sollte, muss es basierend auf dem Kontext der spezifischen Umgebung bestimmt werden.
Ich denke, ein weiterer Unterschied zwischen einer Schnittstelle und einer abstrakten Klasse besteht darin, dass es eine allgemeine und spezielle Beziehung zwischen einer abstrakten Klasse und ihrer Unterklasse geben sollte, während eine Schnittstelle nur eine Reihe von Regeln ist, die ihre Unterklasse implementieren sollte. (Natürlich kann es eine allgemeine und besondere Beziehung geben, aber der Zweck unserer Verwendung von Schnittstellen ist nicht hier.) Zum Beispiel ist es akzeptabel, Fahrzeuge als abstrakte Klassen und Autos, Flugzeuge und Schiffe als Unterklassen zu definieren, da Autos, Flugzeuge und Schiffe alle spezielle Fahrzeuge sind. Beispielsweise besagt die iComparable -Schnittstelle nur, dass die Klassen, die diese Schnittstelle implementieren, verglichen werden müssen, was eine Regel ist. Wenn die Autoklasse iComparable implementiert, bedeutet dies nur, dass unser Auto einen Weg gibt, zwei Autoinstanzen zu vergleichen, die möglicherweise teurer sind als welches Auto oder größer als welches Auto. Es spielt keine Rolle, aber wir können nicht sagen, dass "Autos etwas Besonderes sind und verglichen werden können", was nicht grammatikalisch anwendbar ist.
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.