sgo*_*les 17 java
虚拟函数如何在继承中的幕后工作?编译器是否特别处理虚函数?
Kev*_*ell 38
java中的所有方法都是默认的虚拟方法.这意味着在继承中使用任何方法都可以被覆盖,除非该方法被声明为final或static.
use*_*421 14
'Virtual'是一个C++术语.Java中没有虚拟方法.有一些普通的方法,它们是运行时多态的,而静态或最终的方法则不是.
And*_*are 13
是的,编译器和运行时对虚拟方法的处理方式不同.JVM专门使用虚方法表进行虚方法调度:
对象的分派表将包含对象的动态绑定方法的地址.通过从对象的分派表中获取方法的地址来执行方法调用.对于属于同一类的所有对象,调度表是相同的,因此通常在它们之间共享.属于类型兼容类的对象(例如继承层次结构中的兄弟节点)将具有相同布局的调度表:给定方法的地址将出现在所有类型兼容类的相同偏移处.因此,从给定的调度表偏移量获取方法的地址将获得与该对象的实际类对应的方法.
归档时间:
15 年,8 月 前
查看次数:
39431 次
最近记录:
12 年,4 月 前