Objective-C:从派生类中调用非直接基类实现

时间:2010-07-22 13:05:27

标签: objective-c

在Objective-C中,我有一个基类A,带有实例方法 - (void)doSomething。 B类派生自A并覆盖doSomething。 C类派生自B.在C的doSomething的实现中,我想调用A的doSomething(而不是B)。我该如何实现这一目标?我知道我可以使用[super doSomething]来调用直接的超类实现,但是如果我需要在继承树中更高级的更基本的实现,就像上面提到的那样。在C ++中,您只需执行以下操作:

void C::doSomething()  
{  
    A::doSomething();  
}

如何在Objective-C中实现相同的目标?

3 个答案:

答案 0 :(得分:1)

您可以将代码提取到静态方法中,该方法将实例作为参数。例如:

@interface A : NSObject
{
}

+(void)joe_impl:(A*)inst;

-(void)joe;

@end

@implementation A
+(void)joe_impl:(A*)inst{
    NSLog(@"joe: A");
}

-(void)joe{
    [A joe_impl:self];
}
@end
@interface B : A
{
}

-(void)joe;

@end

@implementation B

-(void)joe{
    [super joe];
    NSLog(@"joe:B");
}
@end
@interface C : B
{
}

-(void)joe;

@end

@implementation C

-(void)joe{
    [A joe_impl:self];
    NSLog(@"joe:C");
}
@end

答案 1 :(得分:0)

你不能在Objective-C中做到这一点,并且以这种方式跳过类层次结构的愿望是一个严重的设计缺陷的症状。

答案 2 :(得分:0)

您可以使用[super doSomething]来调用超类方法