1

假设我有这个类及其子类

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

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

4

1 回答 1

2

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

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

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

于 2012-04-27T03:47:07.213 回答