Java如何实现接口多态?

How does Java implement interface polymorphism?

为了拥有指向某物的指针,您需要确切地知道它是什么类型,对于 classes,它包含的所有数据。我可以看到多态性如何为 classes 工作:指针指向派生 class 的部分,其数据与父 class 相同,并且是 "unaware" 的它下面的附加数据。

如何,那么这对 Java 接口有效吗?接口不提供数据,只提供一组有保证的方法。基本 class 指针无法指向统一数据。

如果这没有意义,我很抱歉;我可以试着说得更清楚。

JVM 通过方法签名在对象中找到一个接口方法,例如这个字节码

INVOKEINTERFACE java/util/List.add (Ljava/lang/Object;)Z

在 ArrayList 上调用 List.add(Object)。这就像在反射

这取决于 JVM 实现。接口的实现很棘手。

最简单的解决方案涉及为接口类型的每个参数传递两个 指针。第一个指针指向对象。第二个指针指向一个虚拟 table,它特定于派生 class 和接口组合。使用此解决方案,为特定接口转换找到合适的第二个指针涉及线性遍历列表。因此它不是 O(1),而是与已实现接口的数量成线性关系。如果不在稀疏 table 上浪费大量内存,就无法在 O(1) 中实现接口。