【问题标题】:How does Java implement interface polymorphism?Java如何实现接口多态?
【发布时间】:2015-04-07 04:29:28
【问题描述】:

为了获得指向某事物的指针,您需要准确地知道它是什么类型,以及对于类,它包含的所有数据。我可以看到多态性对类的作用:指针指向派生类中与父类具有相同数据的部分,并且“不知道”它下面的附加数据。

那么这对 Java 接口有什么作用呢?接口不提供数据,只提供一组有保证的方法。没有基类指针可以指向的统一数据。

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

【问题讨论】:

  • 因为接口保证了契约(或方法集)。
  • @ElliottFrisch 我不明白;你不能指出一个方法,对吗?你是说接口对它们的每个方法都使用一个函数指针字段吗?

标签: java pointers interface polymorphism


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我不明白为什么这样的答案会得到支持。它没有解释 JVM 是如何实际实现接口调用的。
    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2015-03-30
    • 2014-03-04
    • 1970-01-01
    • 2017-05-02
    • 2015-11-08
    相关资源
    最近更新 更多