zum Inhalt springen

Abstrakte Klassen und Interfaces

(1) Abstrakte Klassen

Abstrakte Klassen spielen bei der Implementation "größerer" Vererbungshierarchien eine wichtige Rolle, da sie es ermöglichen, Methoden zu definieren, ohne diese bereits implementieren zu müssen. Die konkrete Implementation solcher Methoden muss erst in abgeleiteten Klassen durchgeführt werden. Abstrakte Klassen sind somit "unvollständig", und können daher auch nicht mit Hilfe des new-Operators direkt erzeugt werden. Als Datentyp (einer lokalen Variable, eines Parameters oder eines Rückgabewertes) sind sie jedoch weiterhin einsetzbar.

Abstrakte Klassen werden durch das Schlüsselwort abstract als solche markiert:

 

und können Methoden enthalten, die ebenfalls mit dem Schlüsselwort abstract definiert werden. Solche Methoden dürfen keinen Methodenkörper enthalten - dieser wird in abgeleiteten Klassen durch das Überschreiben der jeweiligen Methode "nachgereicht". Trotzdem können abstrakte Methoden im Quellcode verwendet werden wie herkömmliche Methoden, denn dadurch, dass nur vollständig implementierte Klassen mittels new erzeugt werden können, ist gewährleistet, dass die abstrakte Methode zur Laufzeit eines Programms implementiert ist.

 

Weitere Informationen zu abstrakten Klassen entnehmen Sie der Java-Einführung Ihrer Wahl (bspw. Kapitel 5.12 in Java ist auch eine Insel).

(2) Interfaces

Interfaces (deutsch "Schnittstellen") erlauben es, ein Konzept ähnlich der Mehrfachvererbung in Java zu verwenden. Sie entsprechen in etwa abstrakten Klassen, in denen keine Objektvariablen und ausschließlich abstrakte Methoden enthalten sind. Es handelt sich bei Interfaces jedoch nicht um Klassen, was sich auch in der Definition eines Interfaces zeigt, in der statt des Schlüsselworts class das Schlüsselwort interface verwendet werden muss:

Da Interfaces keine implementierten Methoden enthalten dürfen, ist eine Unterscheidung von solchen und abstrakten Methoden nicht notwendig - das Schlüsselwort abstract muss hier also nicht benutzt werden.

Soll ein Interface von einer Klasse implementiert werden, so geschieht dies mit Hilfe des Schlüsselworts implements. Im Unterschied zu extends ist es hier möglich, mehr als ein Interface anzugeben. extends und implements schließen sich nicht aus, sondern lassen sich kombinieren (wobei die Reihenfolge - erst extends, dann implements - vorgeschrieben ist):

 

Üblicherweise werden Interfaces nur dann verwendet, wenn wenige Methoden definiert werden sollen, da sie bei der Implementation immer vollständig implementiert werden müssen. In der Praxis handelt es sich daher häufig um "zusätzliche Eigenschaften", mit denen eine Klasse angereichert werden soll (wie bspw. die Fähigkeit, Objekte miteinander zu vergleichen (siehe Comparable).

Weitere Informationen zu Interfaces finden Sie bspw. in Kapitel 10.9 des RRZN-Skripts oder in Kapitel 5.13 aus Java ist auch eine Insel.

*