Ja.
Prüfen Sie den folgenden vorgeschlagenen Konstruktor für Movie:
// vorgeschlagener Konstruktor
public Movie( String ttl, int lngth, String dir, String rtng )
{
title = ttl; // das machen, was der Konstruktor der Superklasse tut
length = lngth;
avail = true;
director = dir; rating = rtng;
}
Es sieht so aus, als gäbe es keine Notwendigkeit den Konstruktor der Superklasse aufzurufen. Aber es wird immer ein Konstruktor der Superklasse aufgerufen, wenn Sie ihn nicht explizit anfordern. Der Java Compiler betrachtet den oben stehenden Code als "Kurzform" für dieses:
// vorgeschlagener Konstruktor
public Movie( String ttl, int lngth, String dir, String rtng )
{
super(); // den argumentenlosen Konstruktor der Superklasse aufrufen
title = ttl; // das machen, was der Konstruktor der Superklasse tut
length = lngth;
avail = true;
director = dir; rating = rtng;
}
Wie immer kommt super() zuerst,
sogar wenn Sie es nicht hineinschreiben,
Wenn die Superklasse keinen argumentenlosen Konstruktor hat,
dann verursacht diese "Kurzform" einen Syntaxfehler.
In unserem Programm fehlt der argumentenlose Konstruktor in der Klassendefinition von VideoTape (die Superklasse).
Der vorgeschlagene Konstruktor (oben) verlangt einen solchen Konstruktor,
also würde er einen Syntaxfehler verursachen.