Die Hauptidee einer abstrakten Klasse ist in der folgenden These enthalten: Manchmal sind keine vorgefertigten Klassen erforderlich, sondern in einer "rohen" Form. Solche Voreinstellungen können nicht direkt verwendet (instanziiert) werden.
Was ist eine abstrakte Klasse in Java?
Schauen wir uns ein anderes Beispiel an. In Java befindet sich im Paket Java.util eine abstrakte Klasse Calendar. Es wird kein bestimmter Kalender implementiert, der beispielsweise in West- und Osteuropa, China, Nordkorea, Thailand usw. verwendet wird. Es verfügt jedoch über viele nützliche Funktionen, z. B. das Hinzufügen mehrerer Tage zu einem bestimmten Datum: Diese Funktionen sind für alle erforderlich Umsetzung des Kalenders. Sie können keine Instanz aus einer abstrakten Klasse erzeugen.
Abstrakte Klassen, abstrakte Java-Methoden
Angenommen, Sie müssen mehrere Grafiken entwickelnElemente wie geometrische Formen: Kreis, Rechteck, Stern usw. Und es gibt einen Container, der sie zeichnet. Jede Komponente hat ein anderes Erscheinungsbild, daher wird die entsprechende Methode (nennen wir sie Paint) anders implementiert. Jede Komponente hat jedoch viele Gemeinsamkeiten: Die Formen müssen in ein Rechteck eingeschrieben sein, sie können eine Farbe haben, sichtbar und unsichtbar sein usw. Das heißt, Sie müssen für alle diese Formen eine übergeordnete Klasse erstellen, in der jede Komponente gemeinsame Eigenschaften erbt.
Wenn die Klasse abstrakte Methoden hat, dannDie Klasse ist abstrakt. Das Schlüsselwort abstract wird vor dem Klassenwort und auch im Methodenkopf platziert. Nach dem Titel einer solchen Methode muss ein Semikolon stehen. In Java kann eine abstrakte Klasse keine Instanzen erstellen. Wenn wir ihre Erstellung verbieten wollen, auch wenn die Klasse keine abstrakten Methoden hat, kann die Klasse als abstrakt deklariert werden. Wenn die Klasse jedoch mindestens eine abstrakte Methode hat, muss die Klasse abstrakt sein. Es ist unmöglich, dass die Klasse abstrakt und endgültig ist, und auch die Methode. Die Methode kann nicht abstrakt, privat, statisch oder nativ sein. Damit geerbte Klassen als nicht abstrakt deklariert und instanziiert werden können, müssen sie alle abstrakten Methoden des übergeordneten Elements implementieren. Die Klasse selbst kann ihre abstrakten Methoden verwenden.
Beispiel:
- abstrakte Klasse AClass {
- öffentliche abstrakte Void-Methode (int a);
- }
- Klasse BClass erweitert AClass {
- public void method (int a) {
- // Körper
- }
Variablen vom Typ abstrakte Klasse sind zulässig. Sie können sich auf einen nicht abstrakten Nachkommen dieser Klasse beziehen oder null sein.
Java-Schnittstellen - eine Alternative zur Mehrfachvererbung
In Java gibt es keine Mehrfachvererbung, da dann bestimmte Probleme auftreten. Eine Klasse kann nicht von mehreren Klassen erben. Es können jedoch mehrere Schnittstellen implementiert werden.
Java-Schnittstellen und abstrakte Klassen - Konzepteähnlich, aber nicht gleich. Eine Schnittstelle kann als öffentlich deklariert werden, dann steht sie allen zur Verfügung, oder Sie können den öffentlichen Modifikator weglassen. Dann ist die Schnittstelle nur in ihrem Paket verfügbar. Das abstrakte Schlüsselwort ist nicht erforderlich, da die Schnittstelle bereits abstrakt ist. Sie können es jedoch angeben.
Schnittstellendeklaration
Es beginnt mit einem Titel und kann zuerst gehendas öffentliche Schlüsselwort, gefolgt vom Schnittstellenwort. Dann erweitert sich das Wort und eine Aufzählung der Schnittstellen, von denen die gegebene geerbt wird, kann kommen. Wiederholungen sind hier nicht erlaubt, und es ist auch unmöglich, dass eine Vererbungsbeziehung eine Kreisbeziehung bildet. Dann kommt der Körper der Schnittstelle, eingeschlossen in geschweiften Klammern. Elemente werden im Hauptteil der Schnittstelle deklariert: konstante Felder und abstrakte Methoden. Alle Felder sind öffentlich endgültig statisch - alle diese Modifikatoren sind optional. Alle Methoden gelten als öffentlich abstrakt - diese Modifikatoren können auch angegeben werden. Nun wurde genug über den Unterschied zwischen einer abstrakten Klasse und einer Java-Schnittstelle gesagt.
- öffentliche Schnittstelle AI erweitert B, C, D {
- // Körper
- }
Verwenden Sie das Schlüsselwort implements, um eine Klasse als Erben einer Schnittstelle zu deklarieren:
- Klasse AClass implementiert BI, CI, DI {}
Das heißt, wenn ein Schnittstellenname nach der Implementierung in einer Klassendeklaration angegeben wird, implementiert die Klasse ihn. Die Erben dieser Klasse erben ihre Elemente und setzen sie auch um.
Schnittstellenvariablen sind ebenfalls zulässig.Sie können sich auf den Typ der Klasse beziehen, die diese Schnittstelle implementiert, oder auf null. Solche Variablen enthalten alle Elemente der Object-Klasse, da Objekte von Klassen abgeleitet werden und diese wiederum von der Object-Klasse geerbt werden.
In diesem Artikel haben wir uns einige Elemente des Java-Objektmodells angesehen - abstrakte Klassen, abstrakte Methoden, Schnittstellen.