Heim  >  Artikel  >  Java  >  Schnittstellen und abstrakte Klassen in Java

Schnittstellen und abstrakte Klassen in Java

伊谢尔伦
伊谢尔伦Original
2016-12-10 09:52:271214Durchsuche

Abstraktion ist eines der Hauptmerkmale des objektorientierten Designs und ihre Verkörperung in Java sind abstrakte Klassen und Schnittstellen. Die beiden sind sich meiner Meinung nach sehr ähnlich.

Abstraktion ist eines der Hauptmerkmale des objektorientierten Designs, und seine Manifestation in Java sind abstrakte Klassen und Schnittstellen. Die beiden sind sich sehr ähnlich und es ist für viele Anfänger und sogar für Leute, die schon seit mehreren Jahren mit Java vertraut sind, schwierig, sie zu unterscheiden. Als ich mir heute den Code für die Sammlungsklasse ansah, stellte ich fest, dass es sich bei einigen davon um Schnittstellen wie List, Map usw. und bei anderen um abstrakte Klassen wie AbstractList, AbstractSet usw. handelt Klar über die beiden, ich bin verwirrt. Daher stellt der Autor heute in diesem Artikel hauptsächlich den Unterschied zwischen den beiden vor.

Abstrakte Klasse

Abstrakte Methode

Die Verwendung von Abstract zum Ändern einer Methode, die sie nur deklariert, aber nicht implementiert, wird als abstrakte Methode bezeichnet. Zum Beispiel:

abstract void fun();

Abstract class

Eine mit abstract modifizierte Klasse wird als abstrakte Klasse bezeichnet. Zum Beispiel:

abstrakte Klasse ClassA{}

Eine Klasse mit abstrakten Methoden muss eine abstrakte Klasse sein. Eine abstrakte Klasse kann keine abstrakten Methoden haben. Abstrakte Klassen können wie gewöhnliche Klassen Mitgliedsvariablen und gewöhnliche Mitgliedsmethoden haben.

Da abstrakte Klassen Methoden ohne konkrete Implementierung enthalten, können Sie abstrakte Klassen nicht zum Erstellen von Instanzobjekten verwenden! Natürlich ist es möglich, dass eine Klasse nur mit abstrakten Methoden modifiziert wird, aber keine abstrakte Methode hat. Dies ist auch eine abstrakte Klasse und kann nicht instanziiert werden. Aber wenn es keine abstrakte Methode gibt, warum sollte man sie dann als abstrakte Klasse entwerfen? Es besteht also keine Notwendigkeit, sich damit zu befassen.

Funktion

Es ist also ersichtlich, dass abstrakte Klassen für die Vererbung existieren. Wenn Sie eine abstrakte Klasse definieren, sie aber nicht erben, ist sie nutzlos. Natürlich muss die Klasse nach der Vererbung alle nicht implementierten Methoden in der übergeordneten Klasse implementieren, andernfalls ist dies nicht zulässig (es sei denn, es handelt sich um eine abstrakte Klasse, die von einer abstrakten Klasse geerbt wurde. In diesem Fall muss sie nicht implementiert werden).

Der Unterschied zwischen gewöhnlichen Klassen

Abstrakte Methoden müssen öffentlich oder geschützt sein (denn wenn sie privat sind, können sie nicht von Unterklassen geerbt werden und Unterklassen können diese Methode nicht implementieren). Methode ist für die Öffentlichkeit.

Abstrakte Klassen können nicht zum Erstellen von Objekten verwendet werden.

Wenn eine Unterklasse eine abstrakte Klasse erbt, muss die Unterklasse die abstrakte Methode der übergeordneten Klasse implementieren. Ansonsten muss auch die Unterklasse als abstrakte Klasse definiert werden.
In anderen Aspekten gibt es keinen Unterschied zwischen abstrakten Klassen und gewöhnlichen Klassen.

Interface

Interface ist ein äußerst abstrakter Typ, der abstrakter als eine abstrakte Klasse ist. Schnittstellen können Variablen und Methoden haben. Die Variablen in der Schnittstelle werden jedoch implizit als öffentliche statische Endvariablen bezeichnet (definiert als andere Typen, z. B. privat, wird ein Fehler gemeldet), was auch bedeutet, dass die Variablen initialisiert werden müssen. Methoden in der Schnittstelle werden implizit als öffentliche abstrakte Methoden bezeichnet (die Verwendung anderer Schlüsselwörter wie private, protected, static, final usw. führt zu einem Fehler).

Und alle Methoden in der Schnittstelle können keine spezifische Implementierung haben, und die Methoden in der Schnittstelle müssen abstrakte Methoden sein.

In ähnlicher Weise müssen alle Methoden implementiert werden, wenn eine nicht abstrakte Klasse eine Schnittstelle implementiert. Andernfalls muss die Klasse eine abstrakte Klasse oder Schnittstelle sein.

Vergleich zwischen abstrakten Klassen und Schnittstellen

Unterschiede auf Syntaxebene

Schnittstellen können nur öffentliche abstrakte Methoden haben, während abstrakte Klassen mehr Methodentypen haben und gewöhnliche Methoden haben können;
Mitgliedsvariablen in der Schnittstelle können nur vom öffentlichen statischen Endtyp sein und können gewöhnliche Variablen haben.
Schnittstellen können keine statischen Codeblöcke und statischen Methoden enthalten, während abstrakte Klassen statischen Code haben können. Blöcke und statische Methoden;
Eine Klasse kann nur eine abstrakte Klasse erben, aber eine Klasse kann mehrere Schnittstellen implementieren.
Unterschiede auf Designebene

1) Abstrakte Klassen sind die Abstraktion von Dingen (Abstraktion von Klassen) und Schnittstellen sind die Abstraktion von Verhalten.

Zum Beispiel ist Bird als abstrakte Klasse definiert und wird von verschiedenen Vögeln implementiert. Definieren Sie eine Schnittstelle namens Fly. Verschiedene Vögel können diese Schnittstelle implementieren. Laienhaft ausgedrückt: Vererbung ist eine „Ist es“-Beziehung, während die Schnittstellenimplementierung eine „Ist es ist“-Beziehung ist. Wenn ein Vogel Bird erbt, wird sein Typ bestimmt. Ob die Fliegenschnittstelle implementiert wird, hängt nur davon ab, ob er über diese Funktion (Verhalten) verfügt.

2) Die abstrakte Klasse ist ein Vorlagendesign und die Schnittstelle ist eine Verhaltensspezifikation und ein radiales Design.

Nachdem Sie beispielsweise das abstrakte Klassenvorlagendesign verwendet haben, müssen Sie die Methode nur in der Vorlage ändern, und alle Unterklassen können nach Verwendung des Schnittstellenradialdesigns aktualisiert werden Beim Ändern muss diese Methode in allen Implementierungsklassen geändert werden, bevor sie unabhängig voneinander aktualisiert werden können.

Die Verbindung zwischen den beiden Verwendungen

1. Wenn die Schnittstelle geerbt wird, muss die Schnittstelle geerbt werden. Kann nicht erreicht werden. Abstrakte Klassen können nicht geerbt werden

2. Abstrakte Klassen können Schnittstellen implementieren und abstrakte Klassen erben, aber keine Schnittstellen erben


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn