Ü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?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage