繁体   English   中英

Java如何实现接口多态性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM