Überschreiben von Methoden in Java und anschließendes Umwandeln des Verhaltens von Objekten in übergeordnete Klassen
Ich habe eine Elternklasse, A, und eine Kindklasse, B, und B überschreibt eine Methode, f, von A.
public class A
{
public String f()
{
return "A";
}
}
public class B extends A
{
...
public String f()
{
return "B";
}
public static void main(String[] args)
{
B b = new B();
A a = (A) b;
System.out.println(b.f()); //prints: B
}
}
Ich erstelle ein Objekt vom Typ B, b und wandle es in Typ A um, ordne es einer Variablen vom Typ A, a zu und rufe dann die Methode f für a auf. Jetzt würde ich erwarten, dass die Methode der übergeordneten Klasse aufgerufen wird, da ich mit einem Objekt vom Typ A arbeite, dies jedoch nicht der Fall ist. Es wird die b-Version der Methode aufgerufen (druckt "B" anstelle von "A" in den Code unten).
Warum ist es so? Ist es eine Designentscheidung oder eine technologische Grenze?