簡體   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