16.1.2 Erben von einer abstrakten Klasse |
|
Wir nennen eine Klasse abstrakt, wenn
mindestens eine der in ihr angelegten Methoden abstrakt ist. Wann ist aber
eine Methode abstrakt? Sie ist abstrakt, wenn sie keinen Methodenrumpf und
damit keine Funktionalität implementiert hat. Ihr Aufbau hat folgende
Gestalt: |
|
<Modifizierer> abstract
<Rückgabewert> <MethodenName>(<Parameterliste>); |
|
Das reservierte Wort
abstract
muss gesetzt werden. Da die Klasse nun selbst abstrakt wird, wird auch
deren Namen ein
abstract
vorgesetzt:
public abstract class <Klassenname> { Instanzen einer abstrakten Klasse
lassen sich nicht erzeugen. Der Grund ist offensichtlich. Liese man die
Instanzbildung zu, stünden den Instanzen nicht implementierte Methoden zur
Verfügung was zu Inkonsistenz und Fehlern führen könnte. Erbt nun
eine andere Klasse von einer anderen Klasse, so muss sie die ererbte
abstrakte Methode implementieren1). |
|
Konkret |
Das Gesagte beschreibt aber genau das,
was wir uns am Ende des Kapitels 16.1.1 gewünscht hatten. Die abstrakte
Methode ist so etwas wie ein Verweis darauf, welche Methode in einer
Unterklasse implementiert wird. In der Klasse Figur legen wir also die
abstrakte Methode berechneInhalt(...)
an: public abstract double berechneInhalt(); die ganze Klasse wird damit abstrakt:
|
Neben der abstrakten Methode
berechneInhalt(..)
ist auch die Methode
zeichneDich(Graphics g)
abstrakt. Wie unschwer zu erraten ist, sind die Gründe die gleichen wie
bei der Methode berechneInhalt(). Unser Testprogramm FigurenTest5.java lässt sich jetzt übersetzen und ausführen. |
|
UML | Im neuen Klassendiagramm in UML-Notation erkennen wir abstrakte Klassen und abstrakte Methoden an der kursiven Schreibweise der Klassen- bzw. Methodennamen. |
![]() |
|
Fußnoten | |
Ganz stimmt diese Aussage nicht. Denn
man kann sehr wohl eine Klasse von einer abstrakten Klasse erben lassen,
ohne deren abstrakten Methoden zu implementieren. Dann ist diese Klasse
aber auch abstrakt und man kann von ihr keine Instanzen bilden. Irgendwann
muss es also in der Vererbungslinie eine Klasse geben, die nicht abstrakt
ist, die also alle geerbten abstrakten Methoden implementiert hat. Anders
macht es keinen Sinn. [zurück] |
|
zu | 16.1.3 Ein Interface implementieren |
zur Startseite | www.pohlig.de (C) MPohlig 2005 |