关于Super

作者: fever105 | 来源:发表于2016-01-20 13:40 被阅读464次

关于Super


  • 何为super

[super xxx] calls the super method on the current instance (i.e. self).
[super xxx] ,表示接收xxx消息的对象是self,但是xxx方法的实现是super的。

http://stackoverflow.com/questions/11827720/why-does-self-class-super-class
  • 一个网上很有名的面试题:下面的代码输出结果是什么?
@implementation Son : Father
- (id)init
{
    self = [super init];
    if (self)
    {
        NSLog(@"%@", NSStringFromClass([self class]));
        NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
}
@end

// 答:都是son。
  • 解答:
    1. 所有类的class实例方法都继承自NSObject,来自NSObject Protocol
    2. [super class]代表向Son发送class消息,但class方法的实现来自Father。
    3. 由于Father没有重写class方法,所以沿着继承链向上,最终调用NSObject的实现。
    4. 同理,由于Son也没有重写class方法,所以最终调用的也是NSObject的实现。
    5. 所以,[self class][super class]调用同一个对象(Son)的同一个方法(NSObject的class),它们的返回结果必定相同
    6. 根据文档的定义,class方法Returns the class object for the receiver’s class.(返回消息接收对象所属类的类对象),所以结果都是Son。

相关文章

  • 关于Super

    关于Super 何为super? 解答:所有类的class实例方法都继承自NSObject,来自NSObject ...

  • 关于 super

    来自于 python 核心编程 重写__init__不会自动调用基类的__init__类似于上面的覆盖非特殊方法,...

  • 关于Super

    关于Super 何为super? 一个网上很有名的面试题:下面的代码输出结果是什么? 解答:所有类的class实例...

  • python 面向对象: super()

    python 关于 super 的使用 子类对象调用父类方法 :super(B,b).hh() 子类中调用父类方法...

  • 关于 self 和 super 在oc 中 的疑惑 与 分析

    关于 self 和 super 在oc 中 的疑惑 与 分析

  • 关于super和this 【正解】

    任何一个子类的创建,都会导致整个继承链上的所有的类被实例化## 网上各种文件都在说super和this的作用是感冒...

  • 关于class superClass super

    下面一道面试题:@implementation Son : Father 很多iOS面试题库中都有这一道面试题,上...

  • Super, super, super, super happy

    Parent diaries for 137th days weather:sunny Wed...

  • Super, super, super, super fun d

    亲子日记第136天 天气:晴 星期二 今天是周二,超级超级超级超级超级超级开心的一天٩(๑^o...

  • 泛型小记-----牢骚宣泄

    < ? extends T> < ? super T> 参数化类型,存储,纯字面意思!什么破上界、下界无语。 关于...

网友评论

本文标题:关于Super

本文链接:https://www.haomeiwen.com/subject/kzklkttx.html