[英]How does Java implement interface polymorphism?
为了拥有指向某物的指针,您需要精确地知道它是什么类型,对于类来说,必须知道它包含的所有数据。 我可以看到多态对于类将如何工作:指针指向派生类中与父类具有相同数据的部分,并且“不知道”其下的其他数据。
那如何在Java接口上工作呢? 接口不提供数据,仅提供一组有保证的方法。 没有任何基类指针可以指向的统一数据。
如果这没有道理,我感到抱歉。 我可以尝试使其更加清晰。
JVM通过方法签名(例如,此字节码)在对象中找到接口方法
INVOKEINTERFACE java/util/List.add (Ljava/lang/Object;)Z
在ArrayList上调用List.add(Object)
。 这就像在反思
它取决于JVM的实现。 接口的实现很棘手。
最简单的解决方案是为接口类型的每个参数传递两个指针。 第一个指针指向对象。 第二个指针指向特定于派生类和接口组合的虚拟表。 使用此解决方案,为特定接口强制转换找到合适的第二个指针需要线性遍历一个列表。 因此,它不是O(1)
,而是线性地限制了已实现的接口的数量。 如果不浪费稀疏表上的大量内存,就无法在O(1)
实现接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.