[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.