2010-07-21 37 views
1

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

+0

Weell ...问题是什么? – Gobra 2010-07-21 18:44:56

+0

编辑它以问我需要什么样的“东西”。 – Michael 2010-07-21 18:51:24

回答

0

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

0

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

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

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

}