super,superClass,class
来源:互联网 发布:人工智能程序设计java 编辑:程序博客网 时间:2024/06/10 23:10
研究super,superClass,class:
1.首先定义两个类,SubPerson继承Person;
2.在Person中声明一个方法(没有实现):
@interface Person : NSObject- (void)test;@end
3.在SubPerson中实现test方法:
- (void)test{ NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);}
问题是四个输出各是什么?
4.在viewController中:
//创建一个子类对象,调用test方法;
@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; SubPerson *subP = [[SubPerson alloc] init]; [subP test];}@end
这里请注意,在第3步中会输出什么呢?
NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);
1>首先分析一下self,谁调用test,则self就是谁,viewController中是SubPerson调用,所以self是SubPerson; 2>class是求其类型; 3>superclass是求其父类的类型; 4>super是什么意思呢? --super不是一个指针,仅仅是一个编译指示器; —super仅仅是让当前对象调用父类的方法,调用者还是当前对象self;
结论:第3步中的输出分别是:SubPerson,Person,SubPerson,Person;
问题升级:
如果现在在Person中实现test方法:
@implementation Person- (void)test{ NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);}@end
而在SubPerson中的test方法修改为:
@implementation SubPerson- (void)test{ [super test];}@end
则输出Person的test方法中输出会是什么呢?
分析:方法中的self的意思是谁调用当前方法,self就是谁,又在Person中的test方法任然是SubPerson在调用,所以self还是SubPerson,类推,super还是SubPerson,即输出还是:SubPerson,Person,SubPerson,Person;
0 0
- super,superClass,class
- 对class、superclass、super你了解多少?
- super 与 superclass subclass
- class、extends、super
- class, extends, super
- SuperClass
- Python child, parent, super CLASS
- ES6 Class 中的 super 关键字
- XSuperTooltip - Office 2007 Super Tooltip class
- Eclipse源码阅读:Choose Super Class
- [Ruby笔记]20.Ruby super initialize class
- spring初始化异常ClassVisitor as super class
- [self class]与[super class]引出对self及super的内存调用思考
- java.lang.IllegalAccessError: class javax.activation.SecuritySupport12 cannot access its superclass
- aven class javax.xml.parsers.SecuritySupport12 cannot access its superclass javax.xml.parsers.Secur
- 一种角度理解private,this,super关键字和Class类
- ..ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
- iOS中[super class]为何会输出子类类型?
- 虚函数表是在编译的时候还是运行的时候产生的
- json转化为字符串
- Label设置行间距
- PHP学习(十八)--常见的关键字和魔术方法
- Android音乐播放器(一):搜索手机存储的音乐
- super,superClass,class
- HDU 5667 Sequence
- 阻塞 非阻塞 同步 异步 线程 进程 任务
- android中关于listView复用时出现错乱问题
- 凸优化和非凸优化
- Android问题集锦(1)
- cocoNode节点函数注释
- 我的记单词方法
- Java中普通代码块,构造代码块,静态代码块区别