Java-虚拟方法

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

虚拟函数是如何在继承的幕后工作的?编译器是否专门处理虚拟函数?

提问于
用户回答回答于

对象的调度表将包含对象的动态绑定方法的地址。方法调用是通过从对象的调度表中获取方法的地址来执行的。分派表对于属于同一个类的所有对象都是相同的,因此通常在它们之间共享。属于类型兼容类的对象(例如继承层次结构中的兄弟类)将具有具有相同布局的调度表:对于所有类型兼容类,给定方法的地址将出现在相同的偏移量处。因此,从给定的调度表偏移量中获取方法的地址将得到与对象的实际类相对应的方法。

用户回答回答于

默认情况下,java中的所有方法都是虚拟的。这意味着任何方法在继承中使用时都可以被重写,除非该方法被声明为最终或静态方法。

扫码关注云+社区

领取腾讯云代金券