Kursinhalt
Java Oop
Java Oop
Abstrakte Klasse vs. Schnittstelle
Welche Option wählen?
Aus den vorherigen Kapiteln ist ersichtlich, dass abstract classes
und interfaces
sehr ähnlich sind. Dennoch gibt es Unterschiede zwischen ihnen. Kurz gesagt, werden in der Praxis Interfaces häufig bevorzugt gegenüber abstrakten Klassen. Doch warum ist das so?
Was ist der Unterschied?
Zunächst müssen wir die Unterschiede zwischen einer abstrakten Klasse und einem Interface verstehen. Hier eine Übersicht:
- Syntax:
abstract class
bei der Deklaration einer abstrakten Klasse undinterface
bei der Deklaration eines Interfaces; - Vererbungs-Schlüsselwort:
extends
für die Vererbung einer abstrakten Klasse undimplements
für die Implementierung eines Interfaces; - Bezeichnungen für Unterklassen: Eine Unterklasse einer
abstract class
wird als Unterklasse oder erbende Klasse bezeichnet, während eine Unterklasse einesinterface
als Klassenimplementierung bezeichnet wird; - Anzahl der Vererbungen: Es kann von nur einer abstrakten Klasse geerbt werden, während von mehreren Interfaces geerbt werden kann;
- Eine
abstract class
kann sowohl implementierte als auch abstrakte Methoden enthalten. Seit Java 8 können Interfaces ebenfallsdefault
-Methoden besitzen, auf die wir später in diesem Abschnitt eingehen; - Methoden in einer abstrakten Klasse können beliebige Zugriffsmodifizierer besitzen, während in Interfaces nur der Zugriffsmodifizierer
public
erlaubt ist.
Hinweis
Es ist auch möglich, gleichzeitig von einer abstrakten Klasse zu erben und ein Interface zu implementieren. Zuerst wird das Schlüsselwort
extends
verwendet, danachimplements
. Die Syntax sieht folgendermaßen aus:class ClassName extends AbstractClass implements Interface {}
Vereinfacht gesagt, kann eine abstrakte Klasse als eine Klasse betrachtet werden, die bestimmte Funktionalitäten bereitstellt und bestimmte Regeln vorgibt, aber einige Teile ihren Unterklassen zur Umsetzung überlässt. Ein Interface hingegen ist wie eine Checkliste, die eine Klasse erfüllen muss, indem sie vorgibt, welche Methoden vorhanden sein müssen, ohne tatsächlichen Code bereitzustellen.
Danke für Ihr Feedback!