Objective c 目标C中某类的超类

Objective c 目标C中某类的超类,objective-c,class,superclass,super,Objective C,Class,Superclass,Super,如何将消息发送到某个超类? 例如: @interface A: NSObject; @interface B: A; @interface C: B; @implementation C - (id)init { [super init]; } ,其中“super”是A类,而不是B类您始终可以获取任何类的选择器的IMP,并手动调用它 @implementation C - (id)init { IMP a_init = [A instanceMethodForSelecto

如何将消息发送到某个超类? 例如:

@interface A: NSObject;

@interface B: A;

@interface C: B;

@implementation C

- (id)init {
  [super init];
}

,其中“super”是A类,而不是B类

您始终可以获取任何类的选择器的IMP,并手动调用它

@implementation C
- (id)init
{
    IMP a_init = [A instanceMethodForSelector:_cmd];
    return a_init(self, _cmd);
}
@end
您也可以在其中一行,
返回[A instanceMethodForSelector:_cmd](self,_cmd)


作为记录,
\u cmd
由Objective-C提供给您,是当前方法的
SEL

您始终可以获取任何类选择器的IMP,并手动调用它

@implementation C
- (id)init
{
    IMP a_init = [A instanceMethodForSelector:_cmd];
    return a_init(self, _cmd);
}
@end
您也可以在其中一行,
返回[A instanceMethodForSelector:_cmd](self,_cmd)


作为记录,
\u cmd
由Objective-C提供给您,是当前方法的
SEL

您为什么要这样做?它违反了面向对象继承的一个基本方面,为什么不呢?我想覆盖超超类的方法,但覆盖所有其他方法-来自超类。我可以用C++来做。我有很大的类树,我想减少一个方法的实现,但是不要在超级超级类中触摸这个方法的实现。也许你可以在B中定义一个绕过B并调用A方法的方法。当然,如果有很多类要绕过,这可能会很烦人……是的,它实际上是解决方案,但我不能修改类a和B中的代码。我需要在C类文件中进行修改。为什么要这样做?它违反了面向对象继承的一个基本方面,为什么不呢?我想覆盖超超类的方法,但覆盖所有其他方法-来自超类。我可以用C++来做。我有很大的类树,我想减少一个方法的实现,但是不要在超级超级类中触摸这个方法的实现。也许你可以在B中定义一个绕过B并调用A方法的方法。当然,如果要绕过很多类,这可能会很烦人……是的,它实际上是解决方案,但我不能修改类a和B中的代码。我需要在C类文件中进行修改。