【发布时间】:2020-02-06 22:25:25
【问题描述】:
我了解对象只是数据块,其中第一个成员变量的起始位置与对象完全相同。例如,指针指向位置 0x0100 的对象也将具有位于 0x0100 的第一个成员变量。
但是,像 Java 这样没有实现的语言中的接口如何工作?这些是纯粹的抽象类型。
CPU 或编译器如何知道根据上下文将对象 A 解释为接口 X,或将对象 B 解释为接口 X 和 Y?这是在编译器级别完成的,与较低级别的解释无关吗?
【问题讨论】:
-
了解 vtables。
-
Java 编译为 Java 字节码,而不是机器码。与机器代码相比,Java 字节码是一种相当高级的表示,解释它的 Java VM 实际上知道每个对象实现了哪些接口。
-
例如在 C++ 中,是的,对象布局等在编译时是已知的。给定一个指向没有虚拟成员函数的对象的指针,没有关于它的类型的信息。我认为 Java 接口就像 C++ 中的纯虚拟基类。
标签: object assembly interface linker compiler-construction