Dieser Artikel beschreibt die Verwendung von Schnittstellen und abstrakten Klassen in Java. Teilen Sie es für Ihre Referenz wie folgt weiter:
Im objektorientierten Konzept wissen wir, dass alle Objekte von Klassen dargestellt werden, aber nicht alle Klassen werden verwendet, um Objekte zu beschreiben. Wenn eine Klasse nicht genügend Informationen enthält, um ein konkretes Objekt zu beschreiben, ist eine solche Klasse eine abstrakte Klasse.
Abstrakte Klassen werden häufig verwendet, um abstrakte Konzepte darzustellen, die wir bei der Analyse und Gestaltung des Problems erhalten. Sie sind Abstraktionen einer Reihe konkreter Konzepte, die anders erscheinen, im Wesentlichen gleich sind. Wir können sie nicht instanziieren (können keine konkrete Sache finden), also nennen wir sie Abstraktionen.
Zum Beispiel: Wenn wir "Frucht" beschreiben wollen, ist es eine Abstraktion. Es hat einige häufige Eigenschaften wie Masse und Volumen (Obst haben Masse), es fehlen jedoch Merkmale (Äpfel und Orangen sind Früchte und sie haben ihre eigenen Eigenschaften). Wir können nicht das einzige finden, was Früchte darstellen kann (weil Äpfel und Orangen keine Früchte darstellen können). Abstrakte Klassen können verwendet werden, um es zu beschreiben, sodass abstrakte Klassen nicht instanziiert werden können. Wenn wir eine bestimmte Klasse verwenden, um "Äpfel" zu beschreiben, kann diese Klasse die abstrakte Klasse erben, die "Frucht" beschreibt. Wir alle wissen, dass "Äpfel" eine Art "Frucht" sind.
Im objektorientierten Feld werden abstrakte Klassen hauptsächlich zum Verstecken von Typen verwendet. Wir können eine feste abstrakte Beschreibung einer Reihe von Verhaltensweisen erstellen, aber diese Verhaltensgruppe kann mögliche konkrete Implementierungsmethoden haben. Diese abstrakte Beschreibung ist eine abstrakte Klasse, und diese Reihe möglicher konkrete Implementierungen manifestiert sich als alle abgeleiteten Klassen dieser abstrakten Klasse.
Alle abstrakten Methoden in Schnittstellen und abstrakten Klassen können nicht in konkreten Implementierungen implementiert werden, sondern sollten alle abstrakten Methoden in ihren Unterklassen implementieren (muss eine Funktionskörper haben, auch wenn sie in {} leer ist). Java -Designer können die Flexibilität abstrakter Methoden berücksichtigen, und jede Unterklasse kann abstrakte Methoden entsprechend ihren eigenen Bedürfnissen implementieren.
Die Definition der abstrakten Klasse lautet wie folgt:
public abstract class AbstractClass // Es gibt mindestens eine abstrakte Methode {public int t; // Gewöhnliches Datenmitglied Public Abstract Void Methode1 (); // Abstract -Methode, Unterklassen der abstrakten Klasse müssen abstrakte Methoden in der abstrakten Klasse in der Klasse Public abstrakter void Methode2 () implementieren; öffentliche void method3 (); // Nichtabstrakte Methode öffentliche int method4 (); public int method4 () {... // Abstract-Klasse kann das Standardverhalten von nichtabstrakten Methodenmethoden zugewiesen werden, dh der konkreten Implementierung der Methode} public void method3 () {... // Abstract-Klasse kann das Standardverhalten der nichtabstrakten Methodenmethoden zugewiesen werden, dh die konkrete Implementierung der Methode}}}Die Definition einer Schnittstelle lautet wie folgt:
öffentliche Schnittstellenschnittstelle Schnittstelle {statische endgültige int i; // Es kann keine gewöhnlichen Datenmitglieder in der Schnittstelle geben, nur statische Datenmitglieder, die nicht geändert werden können. Statische Mittel globale, endgültige Mittel können nicht geändert werden. Es kann ohne statische endgültige Modifikation geändert werden und wird implizit als statische und endgültige öffentliche Void -Methode () deklariert; // Die Methoden in der Schnittstelle müssen abstrakte Methoden sein, sodass die öffentliche Void -Methode 2 () keine abstrakte Modifikation benötigt. // Das Standardverhalten von Methoden kann der Schnittstelle nicht zugeordnet werden, dh keine spezifische Implementierung der Methode}Kurz gesagt, abstrakte Klassen sind unvollständige Klassen, und Schnittstellen sind nur Sammlungen abstrakter Methodendeklarationen und statische Daten, die nicht geändert werden können, von denen keiner sofort instanziiert werden kann.
In gewisser Weise ist eine Schnittstelle eine spezielle Form der abstrakten Klasse. In der Java -Sprache stellen abstrakte Klassen eine Vererbungsbeziehung dar. Eine Klasse kann nur eine abstrakte Klasse erben, während eine Klasse mehrere Schnittstellen implementieren kann. In vielen Fällen können Schnittstellen tatsächlich abstrakte Klassen ersetzen, wenn Sie nicht absichtlich die Vererbung für Attribute ausdrücken müssen.
Um weiter zu verstehen, sind die Antworten, die ich von Experten erhalten habe, zum Zweck der Einführung von Java -Einführung abstrakten Klassen und Schnittstellen:
1. Aus der Perspektive der Klassenhierarchie stehen abstrakte Klassen ganz oben auf der Ebene, aber im tatsächlichen Design sollten abstrakte Klassen im Allgemeinen später erscheinen. Warum? Tatsächlich ist der Erwerb abstrakter Klassen ein wenig wie das Extrahieren gemeinsamer Faktoren in der Mathematik: AX+BX, x ist eine abstrakte Klasse. Wenn Sie die vorherige Formel nicht haben, woher wissen Sie, ob X ein häufiger Faktor ist? In dieser Hinsicht steht es auch im Einklang mit dem Prozess der Menschen, die Welt zu verstehen, zuerst konkret und dann abstrakt. Wenn Sie daher viele spezifische Konzepte erhalten und Gemeinsamkeiten im Designprozess finden, sollte es wahr sein, dass diese Sammlung von Gemeinsamkeiten eine abstrakte Klasse ist.
2. Auf der Oberfläche ist die Grenzfläche den abstrakten Klassen sehr ähnlich, aber ihre Verwendung ist völlig anders. Seine grundlegende Funktion besteht darin, einige irrelevante Klassen (Konzepte) zusammen zu sammeln, um eine neue, zentral bedienbare "neue Klasse" zu bilden. Ein typisches Beispiel, das ich den Schülern gebe, ist "Treiber". Wer kann ein Fahrer sein? Jeder kann es tun, solange Sie Ihren Führerschein erhalten. Es ist mir also egal, ob Sie ein Student, ein Angestellter, ein Arbeiter oder ein Chef sind, solange Sie einen Führerschein haben, sind Sie Fahrer.
Schnittstellen -Treiberlizenz {Lizenz getLicence (); } Klasse StudentDriver erweitert Schüler implementiert die Fahrerlizenz {} Klasse whtieCollAmPoyPliverRiver erweitert whtiechandleToMeponements Fahrerlizenz {} Klasse BlueCollarpereDriver erweitert BlueCollarEPlements implementiert die Fahrerlizenz {} Klassen Bossiver erweitert die Implements des Boss -Implements Treiber {}}Wenn ich die "Auto" -Klasse definiere, kann ich den "Treiber" angeben.
Klassenauto {setDriver (Treiberlizenzfahrer);}Zu diesem Zeitpunkt war das Objekt des Cars egal, was der Fahrer tat. Ihr einziger allgemeiner Punkt war, dass sie einen Führerschein erhalten hatten (beide implementierten die Fahrerlizenzschnittstelle). Dies sollte der leistungsstärkste Teil der Schnittstelle sein und ist für abstrakte Klassen unvergleichlich.
Zusammenfassen:
Abstrakte Klassen extrahieren gemeinsame Faktoren von konkreten Klassen, während Schnittstellen einige nicht verwandte Klassen in eine gemeinsame Gruppe "hash" sollen. Normalerweise entwickeln wir eine gute Angewohnheit, mehrere Schnittstellen zu verwenden. Immerhin ist Java im Gegensatz zu C ++ ein einzelnes Vererbung, aber es muss bei der Verwendung abstrakter Klassen (etwas ähnlich wie GOTO) verwendet werden, haha.
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.