Konstruktoren und Vererbung

capri

Mitglied
Hallo Forum,

ich habe eine Frage zu Konstruktoren und Instanzerzeugung im Zusammenhang mit Vererbung.

Und zwar, hatte ich in der Klausur eine Aufgabe:

Java:
class A{
public A(){
System.out.println("Instanz klasse A erzeugt");
//...
}
}

class B extends A{
public B(){
System.out.println("Instanz klasse B erzeugt");
//...
}

class Test{
public void static main(String [] args){
// Stelle 1:
A i1 = new A();
// Stelle 2:
B i2 = new B();
// Stelle 3:
A i3 = new B();
//...
}
}

Was sind die Ausgabeergebnisse an den Stellen 1 bis 3?

In der Klausur habe ich die Lösungen gehabt:
Stelle 1: Instanz klasse A erzeugt
Stelle 2: Instanz klasse B erzeugt
Stelle 3: Instanz klasse B erzeugt

Dies wurde auch als richtig bewertet.

Aber: ich habe das Ganze im Eclipse ausprobiert und da kriege ich das Ergebnis:

Stelle 1:
Instanz klasse A erzeugt

Stelle 2:
Instanz klasse A erzeugt
Instanz klasse B erzeugt

Stelle 3:
Instanz klasse A erzeugt
Instanz klasse B erzeugt

Ich möchte die Klausur wiederholen und bin jetzt sehr verwirrt. Was davon ist richtig?

Danke im Voraus!
Capri
 
Das was dein produktiver Test ausgegeben hast ist richtig, das was du in der Klausur als Antwort gegeben hast ist falsch!

Grund: Es muss immer min ein Konstruktor jeder Klasse in der Ableitungshierarchie aufgerufen werden ob dieser explizit von dir angegeben wurde oder es sich um den Defaultkonstruktor handelt ist egal.
 
Hallo Joose,

danke schön für die Erklärung! Ich habe grade noch eine dritte Klasse C erstellt:

Java:
class C extends B{
public C(){
   System.out.println("Instanz klasse C erzeugt");
}

und habe ausprobiert eine Instanz von C zu erzeugen. Wie du schon sagtest, wurden alle 3 Konstruktoren aufgerufen und das Ergebnis lautet:

Instanz klasse A erzeugt
Instanz klasse B erzeugt
Instanz klasse C erzeugt

Danke noch mal!
Capri
 

Zurück
Oben