zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

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.

Die Klasse 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
{
. . .
}

FRAGE 22:

Ist es möglich eine Klassendefinition zu schreiben, die nicht Object als ihren ultimativen Vorläufer hat?