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:

public abstract class Figur {

  ...

  public abstract double berechneInhalt();
  public abstract void zeichneDich(Graphics g);
  
}
  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  

1)

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