关于子类化的问题

时间:2010-07-21 18:43:03

标签: objective-c oop subclass superclass

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

一样

2 个答案:

答案 0 :(得分:0)

听起来你需要ducktyping。在目标c中,可以使用respondsToSelectorperformSelectorNSInvocation来完成。这可以简化类层次结构。

答案 1 :(得分:0)

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

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

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

}