关于self和super的一道小题

现有基类Parent如下:

1
2
3
4
5
6
7
8
9
10
#import "Parent.h"

@implementation Parent
- (void)test{

NSLog(@"%@",[self class]);
NSLog(@"%@",[self superclass]);
NSLog(@"%@",[super class]);
}
@end


子类Son如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#import "Son.h"

@implementation Son
- (void)test{

// 第一组输出
NSLog(@"%@",[self class]);
NSLog(@"%@",[self superclass]);
NSLog(@"%@",[super class]);

// 第二组输出
[super test];
}
@end

访问aSon.test(),两组输出的内容是一样的Son、Parent、Son[self supperClass]就是访问的父类名,而[self class][super class]他们的调用者都是aSonsuper只是一个编译修饰符,不是指针,指向父类标志(使用父类的代码),本质还是当前aSon调用Parent的方法,并不是用aParent对象调用Parent的方法,毕竟还没有直接[new Person]

显示 Gitment 评论