将方法从子对象传递给声明为NSObject的1st(head)对象的方法

时间:2015-10-17 12:23:24

标签: ios objective-c

作为主题的主题。该问题存在于课程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

1 个答案:

答案 0 :(得分:2)

只需致电super

- (void)insert{ 
  NSLog(@"nothing");
  [super insert]; 
} 

来自Objective-C文档

  

对象可以调用由超类实现的方法

     

在Objective-C中还有另一个重要的关键字,称为super。向super发送消息是一种调用由继承链上的超类定义的方法实现的方法。 super最常见的用法是覆盖方法。