Alle Videos haben einen Verleihpreis,
also sollten die Änderungen in Videoband
vorgenommen werden.
Eine neue Variable leihgebuehr
sollte der Superklasse hinzugefügt werden.
Dann sollte ihr Konstruktor und ihre anzeigen()
Methode modifiziert werden.
Die zwei Subklassen werden diese Änderungen erben. Allerdings müssen dann noch die Konstruktoren der Subklassen modifiziert werden, in denen der Konstruktor der Superklasse aufgerufen wird.
Object
Wir denken an die Regel: jeder Konstruktor
beginnt mit super()
, den Aufruf des Konstruktors der Superklasse.
Wenn wir ihn nicht explizit hineinstellen,
dann wird es für uns der Java Compiler automatisch tun.
Betrachten wir jetzt die Definition von Videoband
:
class Videoband
{
String titel; // Titel des Videos
int laenge; // Anzahl der Minuten
boolean vorhanden; // ist das Video vorhanden?
// Konstruktor
public Videoband(String ttl, int len)
{
titel = ttl; laenge = len;
vorhanden = true;
}
public void anzeigen()
{
System.out.println(
titel + ", " + laenge +
" Min. verfuegbar:" + vorhanden );
}
}
Gemäß der Regel wird der Compiler automatisch dieses tun:
// Konstruktor
public Videoband(String ttl, int len)
{
super(); // den Konstruktor der
// Superklasse verwenden
titel = ttl; laenge = len;
vorhanden = true;
}
Das ist korrekt.
Alle Klassen haben eine Superklasse, bis auf eine.
Die Klasse an der Spitze der Java Klassenhierarchie heißt
Object
.
Wenn eine Klassendefinition keine Superklasse spezifiziert,
dann hat sie automatisch Object
als Superklasse.
Der Compiler setzt es automatisch voraus, zum Beispiel:
class Videoband extends Object
{
. . .
}
Ist es möglich eine Klassendefinition zu schreiben,
die nicht Object
als ihren ultimativen Vorläufer hat?