Java中的虚拟方法调用是什么?

2022-09-02 19:15:59

我在一些计算机科学测试中看到了下一段,我希望我能在这里得到一个很好的解释,因为它意味着什么,因为我用谷歌搜索了一个小时,找不到任何东西。

“当我们说Java语言具有虚拟方法调用时,我们的意思是在java应用程序中,执行的方法由运行时中的对象类型确定”

这是什么意思?谁能更好地解释它?


答案 1

这些行的作者使用了 的 c++ 术语。virtual

更好的术语是动态绑定/动态调度

这意味着,对象的动态类型正在“选择”将调用哪个方法,而不是静态类型。

例如:[伪代码]:

class A {
  public void foo() { }
}
class B extends A { 
  public void foo() { }
}

调用时:

A obj = new B();
obj.foo();

B.foo()将被调用,而不是 ,因为 的动态类型是 。A.foo()objB


答案 2

我们的意思是,在java应用程序中,执行的方法由运行时中的对象类型决定。

interface Animal{
  public void eat();
}


class Person implements Animal{
   public void eat(){ System.out.println("Eating Food");}
}



class Eagle implements Animal{
   public void eat(){ System.out.println("Eating Snake");}
}

主要

Animal animal = new Person();
animal.eat(); //it will print eating food
animal = new Eagle();
animal.eat(); //it will print eating snake