Eine gute Antwort könnte sein:

  1. Der Programmierer kann einen argumentenlosen Konstruktor für eine Klasse schreiben.
  2. Wenn der Programmierer überhaupt keine Konstruktoren für eine Klasse schreibt, dann wird automatisch ein argumentenloser Konstruktor (Standardkonstruktor genannt) zur Verfügung gestellt.
  3. Wenn der Programmierer auch nur einen Konstruktor für eine Klasse schreibt, dann wird der Standardkonstruktor NICHT zur Verfügung gestellt.

Movie instanziieren

In dem Beispielprogramm enthält die Klassendefinition von VideoTape einen Konstruktor, also wurde der Standardkonstruktor nicht automatisch zur Verfügung gestellt. Also verursacht der für Movie vorgeschlagene Konstruktor einen Syntaxfehler. Wir wollen ihn nicht verwenden.

Hier ist ein Beispielprogramm, dass zwei Klassen verwendet:

class TapeStore
{
  public static void main ( String args[] )
  {
    VideoTape item1 = new VideoTape("Microcosmos", 90 );
    Movie     item2 = new Movie("Jaws", 120, "Spielberg", "PG" );
    item1.show();
    item2.show();
  }
}

(Sie können das Programm ausführen, indem Sie NotePad verwenden und die Klassendefinitionen der vorherigen Seiten kopieren und einfügen.) Wenn Sie es ausführen, werden Sie die folgende Ausgabe bekommen:

Microcosmos, 90 Min. verfuegbar:true
Jaws, 120 Min. verfuegbar:true

Die Anweisung item2.show() ruft die show() Methode von item2. Diese Methode wurde ohne Änderungen von der Klasse VideoTape geerbt. Sie sieht folgendermaßen aus:

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

Sie erwähnt nicht die neuen Variablen, die den Objekten vom Typ Movie hinzugefügt wurden, also wird nichts Neues ausgegeben.

FRAGE 14:

Warum nicht show() in VideoTape um diese Zeile ergänzen?

System.out.println( "dir: " + director + rating );