作为主题的主题。该问题存在于课程ObjectSubA
中,我无法调用对象ObjectX
的方法。在一种情况下,方法必须具有相同的方法名称。
file.h
@interface ObjectX : NSObject
- (void) insert;
@end
@interface ObjectSubA : ObjectX
- (void) insert;
@end
@interface ObjectSubB : ObjectX
@end
file.m
@implementation ObjectX
- (void) insert{
NSLog(@"answer");
}
@end
@implementation ObjectSubA
-(void)insert{
NSLog(@"nothing")
[self insert]; // <- need answer, should call insert from ObjectX
}
@end
@implementation ObjectSubB
@end
@implementation app
-(void)launch{
ObjectSubA * a = [[ObjectSubA alloc]init];
[a insert]; // ObjectSubA -> method insert -> ObjectX -> insert -> end. #ERROR
ObjectSubB * b = [[ObjectSubB alloc] init];
[b insert]; //ObjectX -> insert -> end. OK
}
@end
答案 0 :(得分:2)
只需致电super
- (void)insert{
NSLog(@"nothing");
[super insert];
}
来自Objective-C文档
对象可以调用由超类实现的方法
在Objective-C中还有另一个重要的关键字,称为
super
。向super
发送消息是一种调用由继承链上的超类定义的方法实现的方法。super
最常见的用法是覆盖方法。