zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Ja.

Argumentenloser Konstruktor

Prüfen Sie den folgenden vorgeschlagenen Konstruktor für Spielfilm:

// vorgeschlagener Konstruktor
public Spielfilm( String ttl, int len, String reg, String bew )
{
  titel     = ttl; // das machen, was der Konstruktor der Superklasse tut
  laenge    = len;
  vorhanden = true;

  regisseur = reg; bewertung = bew;
}

Es sieht so aus, als gäbe es keine Notwendigkeit den Konstruktor der Superklasse aufzurufen. Aber es wird immer ein Konstruktor der Superklasse aufgerufen, auch wenn Sie ihn nicht explizit anfordern.

Der Java Compiler betrachtet den oben stehenden Code als "Kurzform" für diesen:

// vorgeschlagener Konstruktor
public Spielfilm( String ttl, int len, String reg, String bew )
{
  super(); // den argumentenlosen Konstruktor der Superklasse aufrufen
  titel     = ttl; // das machen, was der Konstruktor der Superklasse tut
  laenge    = len;
  vorhanden = true;

  regisseur = reg; bewertung = bew;
}

Wie immer kommt super() zuerst, auch wenn Sie es nicht angeben. Wenn die Superklasse keinen argumentenlosen Konstruktor hat, dann verursacht diese "Kurzform" einen Syntaxfehler.

In unserem Programm fehlt der argumentenlose Konstruktor in der Klassendefinition von Videoband (der Superklasse). Der vorgeschlagene Konstruktor (oben) verlangt einen solchen Konstruktor, also würde er einen Syntaxfehler verursachen.

FRAGE 13:

(Rückblick:) Wann hat eine Klasse einen argumentenlosen Konstruktor?