1

这可能是以前问过的,但我不知道要搜索什么。这是我现在的层次结构:NSObject > FirstSubclass > SecondSubclass。但是我将在我的应用程序中实现一个新功能,当满足某个条件时,它需要更改 FirstSubclass 中的一些细节。所以实际上我需要一个介于 FirstSubclass 和 SecondSubclass 之间的子类来覆盖 FirstSubclass 的行为。我不需要覆盖 SecondSubclass 本身中的东西,但我需要super对我拥有的所有不同的 SecondSubclass 子类进行某种处理。我可以将 FirstSubclass 中的所有内容更改为使用“if then 语句”,但首先我想确定是否没有其他选择。我需要一个“协议”吗?喜欢在SecondSubclass : FirstSubclasslass <WeirdThingIDontKnow>?

4

2 回答 2

0

听起来你需要鸭式打字respondsToSelector在目标 c 中,它可以通过使用performSelector或来完成NSInvocation。这可以大大简化类层次结构。

于 2010-07-21T18:51:40.133 回答
0

创建一个从 FirstSubclass 派生的新对象(比如 InBetweenSubClass)并覆盖 FirstSubclass 的必要方法。然后将 SecondSubclass 更改为从 InBetweenSubClass 而不是 FirstSubclass 派生。

在 Objective-C 中没有“覆盖”等价物,您只需实现一个具有相同签名的方法,并且基类的该方法被覆盖。您也可以这样做,如果满足特殊条件,则使用新方法,否则使用基(超)类的方法:

-(void) test
{
    if (self.specialcondition)
    {
        [self newTest];
    }
    else
    {
        [super test];
    }

}
于 2010-07-21T18:52:58.977 回答