Java中的方法重写

里亚:

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

布莱恩·阿格纽(Brian Agnew):

为了回答这个问题,特别是在虚拟机中如何实现覆盖,在Java虚拟机编程(Google图书链接)中有一篇文章

VM将在所引用的类中寻找适当的方法定义,然后逐步处理继承栈。显然,在某些阶段将应用各种优化。

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章