Abstrakte Klassen und Schnittstellen werden hauptsächlich zur Abstraktion verwendet, unterscheiden sich jedoch stark voneinander. Beide sind zentraler Bestandteil von Java, haben jedoch eigene Anwendungsmöglichkeiten. Obwohl beide Begriffe gleichbedeutend sind, können sie nicht austauschbar verwendet werden.
Es gibt erhebliche Unterschiede zwischen den beiden. Während eine Schnittstellenmethode standardmäßig abstrakt ist, kann eine Zusammenfassung sowohl abstrakte als auch nicht abstrakte Methoden enthalten. Nun, seit Java 8 haben Schnittstellen auch Methodenimplementierungen und sie können sowohl statische als auch Standardmethoden in Java haben. Untersuchen wir den Unterschied zwischen den beiden im Detail.
Eine abstrakte Klasse in Java ist eine als abstrakt deklarierte Klasse - sie kann abstrakte Methoden enthalten oder nicht. Sie ist einer Java-Schnittstelle ziemlich ähnlich, mit der Ausnahme, dass sie die Implementierung von Standardmethoden enthalten kann. Wie bei der objektorientierten Programmierung wird die Abstraktion in Java mit abstrakten Klassen und Schnittstellen erreicht. In Java bedeutet Abstraktion, die irrelevanten Details vor dem Benutzer zu verbergen und sich nur auf die wesentlichen Details zu konzentrieren, um die Effizienz zu erhöhen und die Komplexität zu reduzieren. Das Schlüsselwort „abstract“ wird verwendet, um eine abstrakte Klasse direkt vor dem Klassenschlüsselwort in der Klassendeklaration zu erstellen.
Eine abstrakte Klasse kann Abstraktionsmethoden enthalten oder nicht (Methoden ohne body). Wenn jedoch eine Klasse mindestens eine Abstraktionsmethode enthält, muss sie als abstrakt deklariert werden. Nicht abstrakte Methoden können jedoch nur in einer abstrakten Klasse verwendet werden, jedoch nur zum Implementieren von Standardverhalten. Die Methoden in einer abstrakten Klasse können je nach Sichtbarkeitsgrad Zugriffsmodifizierer wie private, public, static und protected haben. Eine abstrakte Klasse kann nicht instanziiert werden und bietet keine 100-prozentige Abstraktion, da sie über eine konkrete Methode verfügen kann.
Ein Interface sieht zwar wie eine Klasse aus, ist es aber nicht. Da Java nicht mehrere Vererbungen unterstützt, ist eine Schnittstelle manchmal ideal, um eine Basis für die Klassenhierarchie bereitzustellen. Eine Schnittstelle ist eher eine Blaupause einer Klasse, die auch zur Abstraktion in Java verwendet wird. Es enthält abstrakte Methoden und statische Konstanten. In einfachen Worten ist eine Schnittstelle eine Sammlung abstrakter Methoden, mit der ein Verhalten angegeben wird, das die Klasse implementieren muss. Im Gegensatz zur abstrakten Klasse bietet eine Schnittstelle eine vollständige Abstraktion in Java. Es kann sowohl Methoden als auch Variablen haben wie eine Klasse. Die in interface deklarierten Methoden sind jedoch standardmäßig abstrakt.
Abstrakte Klasse | Schnittstelle |
Ein abstraktes Schlüsselwort wird zum Erstellen einer abstrakten Klasse verwendet und kann mit Methoden verwendet werden. | Das Schnittstellenschlüsselwort wird zum Erstellen einer Schnittstelle verwendet, es kann jedoch nicht mit Methoden verwendet werden. |
Eine Klasse kann nur eine abstrakte Klasse erweitern. | Eine Klasse kann mehrere Schnittstellen implementieren. |
Eine abstrakte Klasse kann sowohl abstrakte als auch nicht abstrakte Methoden haben. | Eine Schnittstelle kann nur abstrakte Methoden haben. |
Variablen sind standardmäßig nicht endgültig. Es kann nicht endgültige Variablen enthalten. | Variablen sind standardmäßig in einer Schnittstelle endgültig. |
Eine abstrakte Klasse kann die Implementierung einer Schnittstelle bereitstellen. | Eine Schnittstelle kann nicht die Implementierung einer abstrakten Klasse bereitstellen. |
Es kann Methoden mit Implementierungen haben. | Es bietet absolute Abstraktion und kann keine Methodenimplementierungen haben. |
Es kann über öffentliche, private, statische und geschützte Zugriffsmodifizierer verfügen. | Die Methoden sind in der Java-Schnittstelle implizit öffentlich und abstrakt. |
Es unterstützt nicht mehrere Vererbungen. | Es unterstützt mehrere Vererbungen. |
Es ist ideal für die Wiederverwendung von Code und die Entwicklungsperspektive. | Es ist ideal für die Typdeklaration. |
Sowohl abstrakte Klasse als auch Schnittstelle werden für die Abstraktion verwendet. Sie haben jedoch ihren gerechten Anteil an Unterschieden. Der Hauptunterschied zwischen den beiden ist auf Abstraktionsmethoden zurückzuführen. Während das erstere über abstrakte Methoden verfügen kann oder nicht, ist das letztere implizit abstrakt. Eine abstrakte Klasse kann sowohl abstrakte als auch nicht abstrakte Methoden haben. Eine Schnittstelle hingegen kann nur abstrakte Methoden haben, daher kann sie nicht implementiert werden, was bedeutet, dass eine Schnittstelle keine nicht abstrakten Methoden haben kann. Eine abstrakte Klasse kann nicht instanziiert werden, was die Erstellung eines Objekts verhindert. Eine Schnittstelle hingegen kann wie eine Klasse aussehen, ist es aber nicht.