Ja.
Wir prüfen 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 wir 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 wir 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.
(Rückblick:) Wann hat eine Klasse einen argumentenlosen Konstruktor?