Eine gute Antwort könnte sein:

Alle Videos haben einen Verleihpreis, also sollten die Änderungen in VideoTape vorgenommen werden. Eine neue Variable rent sollte der Superklasse hinzugefügt werden. Dann sollte ihr Konstruktor und ihre show() Methode modifiziert werden. Die zwei Subklassen werden diese Änderungen erben. Das Ausbessern der Superklasse bringt alle ihre Subklassen in Ordnung.

Die Klasse Object

Denken Sie an die Regel: jeder Konstruktor beginnt mit einem super() Konstruktor. Wenn Sie ihn nicht explizit hineinstellen, dann wird es für Sie der Java Compiler automatisch tun. Betrachten Sie jetzt die Definition von VideoTape:

class VideoTape
{
  String  title;    // Titel des Videos
  int     length;   // Anzahl der Minuten
  boolean avail;    // ist das Video vorhanden?

  // Konstruktor
  public VideoTape( String ttl, int lngth )
  {
    title = ttl; length = lngth; avail = true;
  }

  public void show()
  {
    System.out.println( title + ", " + length + " Min. verfuegbar:" + avail );
  }
}

Gemäß der Regel wird der Compiler automatisch dieses tun:

  // Konstruktor
  public VideoTape( String ttl, int lngth )
  {
    super();     // den Konstruktor der Superklasse verwenden
    title = ttl; length = lngth; avail = true;
  }

Dies 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 VideoTape extends Object
{
. . .
}

FRAGE 22:

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