为什么不能将父对象分配给java中的子引用?

时间:2018-03-20 08:38:33

标签: java

当我尝试将父对象分配给子引用时,控制台上显示的是编译时错误。为什么不能将父对象分配给java中的子引用?

1 个答案:

答案 0 :(得分:-1)

作为user7 saidStultuske updatedCarVehicle,但并非所有Vehicles都是Car。所以这个:

Vehicle v = /*...some kind of Vehicle...*/;
Car c = v;

......毫无意义。如果v没有引用Car实例,该怎么办?

更正式地说,它会违反合同。说我们有:

class Vehicle {
}
class Car extends Vehicle {
    public void drive() {
        // ...
    }
}

假设这实际上有效:

Car c = new Vehicle(); // Doesn't work, but let's pretend it does

如果拨打c.drive()会怎么样?合同(Car)表示它有drive方法,但对象(类型Vehicle)却没有。

即使Car没有添加任何(公共)功能,但仍然会产生Car类型的变量(根据定义,它指的是{{} 1}} Car子类的实例或实例)引用Car对象。 Vehicle不一定是Vehicle

如果您对某个对象有Car引用,并且您知道该对象实际上是Vehicle,那么您可以将其投射:

Car

......因为那里没有不匹配;该对象实际上是Vehicle v = new Car(); Car c = (Car)v; 。演员告诉编译器,程序员,你对Car所指的实际与v兼容的对象负责。 (并且JVM会在运行时进行检查,因此如果您错了,则会得到Car。)