首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用-超级<接口method>与调用-接口<接口method>?

调用-超级<接口method>与调用-接口<接口method>?
EN

Stack Overflow用户
提问于 2018-04-16 17:23:36
回答 1查看 618关注 0票数 0

在Dex版本的037+中,invoke-super midinvoke-interface mid之间的行为有什么不同,其中mid接口方法?

我引用了Dalvik docs 1中的以下内容,但我无法理解它:

在Dex文件版本037或更高版本中,如果method_id引用接口方法,则使用invoke-super调用在该接口上定义的该方法的最特定、非重写版本。同样的方法限制也适用于调用-虚拟。在版本037之前的Dex文件中,拥有一个接口method_id是非法的,也是未定义的。 invoke-interface使用引用接口的method_id调用接口方法,即对具体类未知的对象调用接口方法。

1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-16 17:50:49

Dex版本37增加了对默认接口方法的支持。因此,如果您使用类似于Lmy/interface;->someMethod()V的东西调用invoke-超级,它将在接口层次结构中搜索,以找到提供该接口实现的第一个接口。

因此,对于一个更完整的例子,假设我们有几个类。

  • Lmy/superinterface;
  • 扩展了Lmy/interface;Lmy/superinterface;
  • 实现Lmy/superclass;Lmy/interface;
  • 扩展了Lmy/subclass;Lmy/superclass;

假设Lmy/superinterface;定义了someMethod()V的默认实现,Lmy/superclass;Lmy/subclass;都提供了自己的实现

如果在Lmy/subclass;中有一个v0对象,那么

  • invoke-super {v0}, Lmy/interface;->someMethod()VLmy/superinterface;调用实现
  • invoke-super {v0}, Lmy/subclass;->someMethod()VLmy/superclass;调用实现
  • invoke-virtual {v0}, Lmy/subclass;->someMethod()VLmy/subclass;调用实现
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49863005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档