java 实现多态的原理 群友的问题,itable的一些问题

昨晚群友来电询问关于JVM中itable的一些问题

先看看群友发来的代码。

interface IA{
void f();
}

class A impl IA{
 void f(){
 
 }
} 

class B extends A{
	void g();
}
IA foo = new B();
foo.f();

群友的问题:上面的代码,foo调用f时,是如何实现的?

首先,我们确定下在JAVA中调用方法时用到的几个指令

invokeinterface 使用的是itable

invokevitual 使用的是vtable

invokesepical 直接调用不需要转换

invokestatic  直接调用不需要转换

JAVA编译器在生成字节码的时候,就根据上面的代码生成了invokeinterface的调用,在JVM执行调用时,会依次先找foo的itable中的f方法,没有找到 就继续找父类的itable中的f方法。

posted @   方东信  阅读(141)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2021-02-19 在cocos2d-js里实现socket.io前后端实时通信
2017-02-19 扩展MUD 的efun函数
点击右上角即可分享
微信分享提示