Irgendwie stellt sich gerade mein Wissen über die Vererbungslehre in Objekt Orientierten Sprachen ein wenig auf den Kopf, oder ist das ein Bug in Java?
Ich dachte eigentlich immer, wenn man ein Attribut einer Klasse in einer Kindklasse ändert, dieser Wert auch genommen wird, wenn eine Methode der Elternklasse auf das Attribut zugreift. Meine Javaversion, die ich verwende ist Java 1.6 SE.
Der Folgender Code sollte Veranschaulichen, was ich genau meine:
Die Klasse Main
Download Code!
public class Main {
public Main() {
}
public static void main
(String[] args
) { Mercedes auto = new Mercedes();
auto.beschleunige();
}
}
Die Klasse Auto
Download Code!
public class Auto {
protected int maximaleGeschwindigkeit = 0;
public Auto() {
}
public void beschleunige() {
System.
out.
println("Beschleunige bis: " + maximaleGeschwindigkeit
); }
}
Die Klasse Mercedes
Download Code!
public class Mercedes extends Auto {
// Hier überschreibe ich den Wert!
protected int maximaleGeschwindigkeit = 300;
public Mercedes() {
System.
out.
println("Ich fahre maximal: " + maximaleGeschwindigkeit
); }
}
Als Ausgabe erhalte ich folgendes:
Ich fahre maximal: 300
Beschleunige bis: 0
Ich habe eigentlich erwartet, dass die Ausgabe so lautet:
Ich fahre maximal: 300
Beschleunige bis: 300
Ich habe doch den Attributwert maximaleGeschwindigkeit auf 300 in der Klasse Mercedes geändert. Warum nimmt Java aber den Wert der Elternklasse Auto? Momentan macht mich das ein wenig ratlos.