 Abstrakte Klasse vs. Schnittstelle
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 classbei der Deklaration einer abstrakten Klasse undinterfacebei der Deklaration eines Interfaces;
- Vererbungs-Schlüsselwort: extendsfür die Vererbung einer abstrakten Klasse undimplementsfür die Implementierung eines Interfaces;
- Bezeichnungen für Unterklassen: Eine Unterklasse einer abstract classwird als Unterklasse oder erbende Klasse bezeichnet, während eine Unterklasse einesinterfaceals 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 classkann 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 publicerlaubt ist.
Hinweis
Es ist auch möglich, gleichzeitig von einer abstrakten Klasse zu erben und ein Interface zu implementieren. Zuerst wird das Schlüsselwort
extendsverwendet, 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!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Fragen Sie mich Fragen zu diesem Thema
Zusammenfassen Sie dieses Kapitel
Zeige reale Beispiele
Awesome!
Completion rate improved to 4.76 Abstrakte Klasse vs. Schnittstelle
Abstrakte Klasse vs. Schnittstelle
Swipe um das Menü anzuzeigen
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 classbei der Deklaration einer abstrakten Klasse undinterfacebei der Deklaration eines Interfaces;
- Vererbungs-Schlüsselwort: extendsfür die Vererbung einer abstrakten Klasse undimplementsfür die Implementierung eines Interfaces;
- Bezeichnungen für Unterklassen: Eine Unterklasse einer abstract classwird als Unterklasse oder erbende Klasse bezeichnet, während eine Unterklasse einesinterfaceals 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 classkann 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 publicerlaubt ist.
Hinweis
Es ist auch möglich, gleichzeitig von einer abstrakten Klasse zu erben und ein Interface zu implementieren. Zuerst wird das Schlüsselwort
extendsverwendet, 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!