Я тестировал ковариантные типы возвращаемых данных и столкнулся с этой проблемой.
class Vehicle {
int i = 3;
}
class Car extends Vehicle{
int i = 5;
public Car returningCar(){
System.out.println("Returning Car");
return new Car();
}
public Vehicle returningCarInVehicle(){
System.out.println("Returning CarInVehicle");
return new Car();
}
}
public class ScjpTest{
public static void main(String[] args){
Car car = new Car();
Vehicle vehicleCar = car.returningCar();
Vehicle vehicleCar2 = car.returningCarInVehicle();
System.out.println("vehicleCar " + vehicleCar.i);
System.out.println("vehicleCar2 " + vehicleCar2.i);
}
}
Вывод на вышеупомянутый возврат автомобиля
Returning
CarInVehicle
vehicleCar 3
vehicleCar2 3
Я не понимаю, почему вывод равен 3. Я ожидал, что результат будет 5 в обоих случаях, потому что во время выполнения JVM использует реальный объект, а не ссылку.
Спасибо