Akeshihiro
Erfahrenes Mitglied
Also es ist so: AbstrakterMario hat ja jetzt keinen Default-Konstruktor, da du ja einen anderen Konstuktor explizit deklariert hast. Da die abgeleiteten Klassen in der in der Call-Hierarchie entsprechend einen Konstruktor der Vaterklasse aufrufen wollen und der Default-Konstruktor per Default auch nur den Default-Konstruktor der Vaterklasse aufruft, haben die Klassen jetzt ein Problem, denn es gibt diesen Default-Konstruktor nicht in AbstrakterMario und somit weiß jetzt der Default-Konstruktor (z.B. von SuperMario) nicht, was er machen soll. Das heißt du musst jetzt auch in den abgeleiteten Klassen die entsprechenden Konstruktoren explizit implementieren, wobei das eigentlich eher egal ist, es geht nur um den Aufruf. Aber sinnvoller Weise würde es ja Sinn machen, wenn man die Konstruktoren auch mit sinnvollen Werten füttert und nich mit fiktivem Mist und diese Werte bekommst du eben durch einen entsprechenden Konstruktor.
So, jetzt könnte man sich natürlich fragen, warum dann überhaupt in AbstrakterMario schon einen Konstruktor deklarieren, wenn ich in den Subklassen eh wieder die Konstruktoren deklarieren muss. Ganz einfach, weil die Konstruktoren der abgeleiteten Klassen anders aussehen. Die eigentliche Arbeit macht immer noch der Konstruktor von AbstrakterMario, die Konstruktoren der Subklassen leiten den Aufruf nur weiter, haben aber an sich keinen sinnvollen Code (außer FlugMario, da er ja noch die Flugzeit bekommt).
Das sieht dann so aus:
Das ist der ganze Trick dabei. Bei FlugMario sieht der Konstruktor dann etwas anders aus, weil er noch einen weiteren Parameter hat. Aber auch da wird einfach per super() der Vaterkonstruktor aufgerufen, nur musst du dann halt noch das mit der Flugzeit managen.
So, jetzt könnte man sich natürlich fragen, warum dann überhaupt in AbstrakterMario schon einen Konstruktor deklarieren, wenn ich in den Subklassen eh wieder die Konstruktoren deklarieren muss. Ganz einfach, weil die Konstruktoren der abgeleiteten Klassen anders aussehen. Die eigentliche Arbeit macht immer noch der Konstruktor von AbstrakterMario, die Konstruktoren der Subklassen leiten den Aufruf nur weiter, haben aber an sich keinen sinnvollen Code (außer FlugMario, da er ja noch die Flugzeit bekommt).
Das sieht dann so aus:
Java:
public class SuperMario extends AbstrakterMario {
public SuperMario(boolean gross, int leben) {
super(gross, leben);
}
}
Das ist der ganze Trick dabei. Bei FlugMario sieht der Konstruktor dann etwas anders aus, weil er noch einen weiteren Parameter hat. Aber auch da wird einfach per super() der Vaterkonstruktor aufgerufen, nur musst du dann halt noch das mit der Flugzeit managen.
Zuletzt bearbeitet: