Über das Casting von Unterklassen zu Superklassen in JAVA

public class Car {

    String color;

    public void thisIs(){
        System.out.println("Calling method from Car: the color is " + color);
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

public class BMW extends Car {

    public void thisIs(){
        System.out.println("Calling method from BMW: the color is " + color);
    }
    public Car toCar(){
    Car newCar = new Car();
    newCar.setColor(this.color);
    return newCar;
}

}

public class AbstractTest {

    public static void main(String args[]){
        Car aCar = new Car();
        aCar.setColor("Red");
        aCar.thisIs();

        BMW aBMW = new BMW();
        aBMW.setColor("Black");
        aBMW.thisIs();

        //Car aaCar = new Car();
        //aaCar = (Car)aBMW;
        //aaCar.thisIs();

            Car aaCar = aBMW.toCar();
    aaCar.thisIs();
    }
}

Ich erwarte das Ergebnis:

Aufrufmethode aus dem Auto: Die Farbe ist Rot

Aufrufmethode von BMW: Die Farbe ist Schwarz

Aufrufmethode aus dem Auto: Die Farbe ist Schwarz

Aber das Ergebnis ist:

Aufrufmethode aus dem Auto: Die Farbe ist Rot

Aufrufmethode von BMW: Die Farbe ist Schwarz

Aufrufmethode von BMW: Die Farbe ist Schwarz

Wo irre ich mich Und wie kann ich die Methode aus der Superklasse verwenden, um die Daten in einem Unterklassenobjekt abzurufen? Ich kann eine schreibentoCar() Methode in der BMW Klasse, dies zu tun. Aber warum funktioniert das Casting nicht? Danke im Voraus!

OK! Vielen Dank!

Ich habe verstanden, warum Casting nicht funktioniert.

Deshalb füge ich in BMW toCar () eine Methode hinzu, um das gewünschte Ergebnis zu erzielen.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage