Vererbte Methode aus Unterklasse benutzen
Markus Möller
- java
Hallo zusammen!
Folgendes Problem:
Eine Klasse definiert eine Methode doSomething(), die auch in ihr verwendet wird.
Unterklassen übeschreiben diese Methoden.
-----------------------------------
class OberKlasse {
protected static void doSomething() {
System.out.println ("OBERKLASSE);
}
public void oneMethod() {
doSomething();
}
}
class UnterKlasse {
protected static void doSomething() {
System.out.println ("UNTERKLASSE);
}
}
-----------------------------------
Wenn ich jetzt eine Instanz der Unterklasse erstelle und die Methode "oneMethod()", die vererbt wurde, aufrufe, wird die Methode aus der Oberklasse genommen (Ausgabe: "OBERKLASSE"). Wie bekomme ich es hin, dass die Methode aus der Unterklasse genommen wird?
Hi!
Wenn ich jetzt eine Instanz der Unterklasse erstelle und die Methode "oneMethod()", die vererbt wurde, aufrufe, wird die Methode aus der Oberklasse genommen (Ausgabe: "OBERKLASSE"). Wie bekomme ich es hin, dass die Methode aus der Unterklasse genommen wird?
Andersrum hätte ich es Dir ja noch sagen können (super.doSomething()), aber so denke ich, bleibt Dir nichts anderes übrig, als oneMethod() auch zu überschreiben.
VG->Cologne
Simon
Hi,
Hallo zusammen!
Folgendes Problem:
Eine Klasse definiert eine Methode doSomething(), die auch in ihr verwendet wird.
Unterklassen übeschreiben diese Methoden.?
Falsch!
Du verwendest den static modifier, wodurch die Methoden zu Klassenmethoden werden, die _NIE_ überschrieben, sondern nur verdeckt werden (bzw. in der Subklasse "nicht sichtbar" sind).
Lasse das "static" weg, und dein Code verhält sich exakt so, wie Du es erwartet hast.
Viel Grüße,
Martin
PS:
Deiner UnterKlasse fehlt noch ein "extends OberKlasse"
Hallo und Danke!
Die Methode muss static sein, da "oneMethod" auch static ist (hatte ich im Beispiel fälschlicherweise vergessen). Sonst kommt ein Fehler, weil eine nichtstatische Methode nicht von einer statischen aufgerufen werden kann.
class OberKlasse {
protected static void doSomething() {
System.out.println ("OBERKLASSE);
}
public static void oneMethod() {
doSomething();
}
}
P.S.: Das "extends Oberklasse" fehlte nur im Beispiel.
Hi Markus,
Die Methode muss static sein, da "oneMethod" auch static ist (hatte ich im Beispiel fälschlicherweise vergessen). Sonst kommt ein Fehler, weil eine nichtstatische Methode nicht von einer statischen aufgerufen werden kann.
Das ist mir schon klar ;-)
Wenn Du aus irgendwelchen Gründen darauf angewiesen scheinst, dass "oneMethod()" statisch sein _muss_, solltest Du Dein Design auf jeden Fall nochmal überdenken. Das hat nämlich mit OO ziemlich wenig zu tun (unpraktischer: die Vorteile dieses Design-Prinzips belieben ungenutzt).
Viele Grüße,
Martin