之前可能会问过,但我不知道要搜索什么。这是我的层次结构:NSObject> FirstSubclass> SecondSubclass。但是我要在我的应用程序中实现一个新功能,这需要在满足某个条件时更改FirstSubclass中的一些细节。所以实际上我需要FirstSubclass和SecondSubclass之间的子类来覆盖FirstSubclass的行为。我不需要覆盖SecondSubclass本身的东西,但我需要某种super
用于我拥有的所有不同的SecondSubclass子类。我可以更改FirstSubclass中的所有内容以使用“if then statements”但首先我想确定是否没有其他选项。我需要一个“协议”吗?就像SecondSubclass : FirstSubclasslass <WeirdThingIDontKnow>
?
答案 0 :(得分:0)
听起来你需要ducktyping。在目标c中,可以使用respondsToSelector
,performSelector
或NSInvocation
来完成。这可以简化类层次结构。
答案 1 :(得分:0)
创建一个派生自FirstSubclass的新对象(比如InBetweenSubClass)并覆盖FirstSubclass的必要方法。然后将SecondSubclass更改为从InBetweenSubClass而不是FirstSubclass派生。
Objective-C中没有“覆盖”等价物,您只需实现具有相同签名的方法,并覆盖基类的方法。你也可以这样做,如果满足特殊条件,使用new方法,否则使用base(super)类的方法:
-(void) test
{
if (self.specialcondition)
{
[self newTest];
}
else
{
[super test];
}
}