Objective-C: вызов немедленной реализации базового класса из производного класса - PullRequest
2 голосов
/ 22 июля 2010

В Objective-C у меня есть базовый класс A с методом экземпляра - (void) doSomething.Класс B является производным от A и перезаписывает doSomething.Класс C является производным от B. В реализации doSomething C я хочу вызвать doSomething A (вместо B).Как мне этого добиться?Я знаю, что могу использовать [super doSomething] для вызова немедленной реализации суперкласса, но что, если мне понадобится более базовая реализация выше в дереве наследования, как в вышеупомянутом случаеВ C ++ вы просто делаете следующее:

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

Как мне добиться того же в Objective-C?

Ответы [ 3 ]

1 голос
/ 22 июля 2010

Вы можете извлечь код в статический метод, который принимает экземпляр в качестве аргумента. Пример:

@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
0 голосов
/ 23 мая 2011

Вы можете использовать [super doSomething] для вызова методов суперкласса

0 голосов
/ 22 июля 2010

Вы не можете сделать это в Objective-C, и желание прыгнуть по иерархии классов таким образом является симптомом серьезного недостатка дизайна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...