@interface Person:NSObject
{
NSString* name;
}
- (void) setName:(NSString*) yourName;
@end
@interface PersonMe:Person
{
NSUInteger age;
}
- (void) setAge:(NSUInteger) age;
- (void) setName:(NSString*) yourName andAge:(NSUInteger) age;
@end
@implementation PersonMe
- (void) setName:(NSString*) yourName andAge:(NSUInteger) age {
[self setAge:age];
[super setName:yourName];
}
@end
int main(int argc, char* argv[])
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; PersonMe* me = [[PersonMe alloc] init];
[me setName:@"asdf" andAge:18];
[me release];
[pool drain]; return 0;
}
self是类的隐藏的参数,指的是当前调用方法的类,另外一个隐藏参数是 _cmd,代表当前类方法的selector。
super并不是隐藏参数,它是一个“编辑器指示符”,它和self指向给的是相同的消息接受者
如上面的代码
[self setAge:age];
[super setName:yourName];
不论是哪个,接收“setName”这个消息的接受者都是PersonMe* me 这个对象,不同的是super告诉编译器,当调用setName这个方法时,要去调用父类的方法,而不是在本类里。
当使用self调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找,
而当使用super时,则直接从父类的方法列表中开始找,然后调用父类的这个方法