【问题标题】:Forcing a superclass to call its own method when sender subclass has the same signature当发送方子类具有相同的签名时,强制超类调用自己的方法
【发布时间】:2012-04-27 02:13:01
【问题描述】:

假设我有这个类及其子类

@interface MySuperClass
- (void)open:(id)type value:(id)value;
- (void)openWebpage:(NSURL*)url;
@end

@interface MySubClass
- (void)openWebpage:(MyBookmarkClass*)bookmark;
@end

调用[someMySubclass openWebpage:someBookmark] 调用[super open:BookmarkClass value:self.url]。而open:value 调用[self openWebpage:url]

我意识到这是非常做作的,但我遇到了类似的情况。我的困惑是,即使在MySuperClass 中调用[self openWebpage:url],当它被执行时openWebpage: 正在调用者MySubClass 的上下文中运行,它不知道如何处理NSURL .

所以我的问题是:有没有办法强制在其原始上下文中调用某些东西?或者让它尽可能多地调用 super 并找到最接近顶部的方法?

【问题讨论】:

    标签: objective-c inheritance subclass


    【解决方案1】:

    只有一个上下文。有一个对象。它的类是MySubClass

    用不同的不兼容类型覆盖方法是错误的。不要那样做。这不是具有函数重载的 C++。没有基于参数类型的调度。

    约定是通过它们所作用的方法来命名方法。因此,您可能在MySuperClass 中有一个名为-openWebpageURL: 的方法,而在MySubClass 中引入了另一个名为-openWebpageBookmark: 的方法。请注意,MySubClass 仍然有一个名为 -openWebpageURL: 的方法继承自 MySuperClass

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2018-06-13
      • 2022-10-06
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多