首先解释一下各个关键字的含义:
- super:是编译器指示符,仅仅是一个标志,并不是指针,仅仅是标志的当前对象去调用父类的方法,本质还是当前对象调用;super:并不是让父类对象调用方法,调用者还是本身;
- class:获取方法调用者的类;
- superclass: 获取方法调用者的父类;
- self: 代表当前对象;也就是在哪个类里调用了就代表哪个类的对象;
先创建两个类,一个 Father 类,另一个继承自 Father 的 Son 类;在父类定义一个类方法:
+ (void)test
{
NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);
}
然后直接使用 [Father test]调用:
打印结果: Father NSObject Father NSObject
每一个方法的打印都可以和上面的描述对应
接着在子类的 Son .m 中重写父类的test 方法:
+ (void)test
{
NSLog(@"%@ %@ %@ %@",[self class],[self superclass],[super class],[super superclass]);
}
然后直接使用 [Son test]调用:
打印结果: Son Father Son Father
每一个方法的打印都可以和上面的描述对应
最后将子类的 Son .m 中test 方法改写为:
+ (void)test
{
[super text];
/*
子类调用的本方法回到父类的 test 方法中;但同时 super 还是代
表的子类 son; 也就是说在调用父类的 test 的方法时还是子类对象在调用;
*/
}
然后使用 [Son test]调用:
打印结果: Son Father Son Father
每一个方法的打印都可以和上面的描述对应