О приведении подкласса к суперклассу в 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();
    }
}

Я ожидаю, что результат будет:

Вызов метода из автомобиля: цвет красный

Метод вызова от BMW: цвет черный

Метод вызова из автомобиля: цвет черный

Но результат, который я получил:

Вызов метода из автомобиля: цвет красный

Метод вызова от BMW: цвет черный

Метод вызова от BMW: цвет черный

Где я не прав? И как я могу использовать метод из суперкласса для получения данных в объекте подкласса? Я могу написатьtoCar() метод в классе BMW, чтобы сделать это. Но почему кастинг не работает? Спасибо вперед!

ХОРОШО! Спасибо!

Я понял, почему кастинг не работает.

Итак, я добавляю метод в BMW toCar (), чтобы получить желаемый результат.

Ответы на вопрос(5)

Ваш ответ на вопрос