首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超级应该如何与具体实例的行为?

超级应该如何与具体实例的行为?
EN

Stack Overflow用户
提问于 2015-08-25 15:04:29
回答 2查看 119关注 0票数 1

假设object是类C的一个实例。还假设object有一个特定于实例的方法m附加到它。方法m是在C及其超类C0中定义的。问题是,表达式应该采用哪种方法?

代码语言:javascript
复制
super m

何时调用self ==对象,以及为什么?

我看到两个可能的答案:

  1. C >> #m (对象类中的方法)
  2. C0 >> #m (对象类超类中的方法)

编辑

尽管我们实现特定于实例的行为的方式对super的语义不重要,但让我指出,我最喜欢的实现是将所谓的MethodDictionaryArray (或简称MDA )放在对象头中,而不是对象类中。可以想象,MDA包含继承链的方法字典。

使用此实现,您可以将实例行为放入新的MethodDictionary (MD)中,并将对象的MDA重新定义为嵌套数组#{MD. MDA}

EN

回答 2

Stack Overflow用户

发布于 2015-08-25 17:32:14

IMHO应该调用C0>>m,使其行为类似于C的“正常”实例。如何实现特定于实例的行为的实现细节并不重要。如果您将一个方法从C复制到它的实例,那么理想情况下,它的行为应该与以前完全相同。

票数 4
EN

Stack Overflow用户

发布于 2015-08-29 00:57:16

super的标准定义是,Super会以self的身份向同一个接收方发送消息,但在上面定义当前方法的类中启动方法查找。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32207579

复制
相关文章

相似问题

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