当发送方子类具有相同的签名时,强制超类调用自己的方法

时间:2012-04-27 02:13:01

标签: objective-c inheritance subclass

假设我有这个类及其子类

@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]

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

所以我的问题是:有没有办法强迫在原始环境中调用某些东西?或者让它看起来就像它可以在超链上调用超级时间并找到最接近顶部的方法?

1 个答案:

答案 0 :(得分:2)

只有一个背景。有一个对象。它的类是MySubClass

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

惯例是按照他们的行为来命名方法。因此,您可能在-openWebpageURL:中使用名为MySuperClass的方法,在名为MySubClass的{​​{1}}中引入另一种方法。请注意,-openWebpageBookmark:仍然会有一个名为MySubClass的方法,该方法继承自-openWebpageURL: