根据我对动态绑定的了解,JVM 在运行时会查看对象的实际类型并在该类中搜索实现,并通过继承级别向上工作。
例如,如果我们有:Vehicle v = new Car();
假设类Car
extends Vehicle
,我们可以看到引用变量类型是 Vehicle,对象类型是 Car。
如果我们说v.start()
::
JVM 将首先在 Car 类中查找 start 方法实现,然后在 Vehicle 类中查找。
这方面的一个例子是在这段代码中:
public class scratch{
public static void main(String [] args){
Vehicle v = new Car();
v.start();
}
}
class Vehicle{
public void start(){
System.out.println("Vehicle class");
}
}
class Car extends Vehicle{
public void start(){
System.out.println("Car class");
}
}
正如预期的那样,这段代码的输出是:“汽车类”
这是我的问题:如果我从 Vehicle 类中取出 start 方法,完全擦除它,程序将不再运行。根据我对动态绑定的了解,JVM 仍应查看对象的实际类型(在本例中为 Car),并仍运行 start 方法的 car 实现。但是,它不这样做。
为什么?