super,superClass,class,self的含义

首先解释一下各个关键字的含义:

  • 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
每一个方法的打印都可以和上面的描述对应

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容