[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Konstruktoren
Korrektur:
Ich hab' nochmal nachgelesen (Lang Spec 8.6.7 und 8.6.8):
(1) Genau wenn eine Klasse keinen Konstruktor definiert, wird der
triviale erzeugt: klasse () { super(); }
(2) Der Zugriff richtet sich nach der Klasse, d.h., public oder package.
Wenn also eine Klasse nur Konstruktoren mit Argumenten definiert,
muss die Unterklasse wenigstens einen Konstruktor definieren, denn
super() darf dann nicht implizit aufgerufen werden.
Definiert eine Klasse aber auch einen Konstruktor ohne Argumente
explizit, dann braucht die Unterklasse wieder keinen Konstruktor
explizit zu definieren, weil super() wieder moeglich ist. [Ich hatte
behauptet, dass eine Unterklasse immer einen Konstruktor definieren
muss, wenn die Oberklasse irgendeinen definiert hat.]
Definiert man den trivialen Konstruktor explizit, aber mit
throws..., dann muss die Unterklasse auf alle Faelle einen
Konstruktor definieren, denn super() verursacht dann potentiell eine
Exception; die kann man nicht abfangen und muss sie deshalb auch in
der Unterklasse definieren. throws... bringt man dann in dieser
Konstruktor-Kette nie wieder weg.