Java中的方法覆盖

ria*_*ria 4 java overriding

如何在Java中实现方法重写?在C++中我们有vtable的概念..这是如何在Java内部实现的?

Bri*_*new 14

要回答这个问题,特别是在虚拟机中如何实现覆盖,可以在Java虚拟机编程(Google Books链接)中进行编写.

VM将在引用的类中查找适当的方法定义,然后通过继承堆栈向上工作.显然,在某些阶段,将适用各种优化措施.

有关相关字节码指令的说明,请参见此处invokevirtual:

invokevirtual查看给定的描述符,并确定该方法采用的参数数量(这可能为零).它将这些参数从操作数堆栈中弹出.接下来,它将objectref从堆栈中弹出.objectref是对正在调用其方法的对象的引用.invokevirtual检索objectref的Java类,并搜索该类定义的方法列表,然后查找其超类,查找名为methodname的方法,该方法的描述符是描述符.

正如gustafc在下面强调的那样,可以应用各种优化,毫无疑问,JIT将进一步引入.