美文网首页
关于class superClass super

关于class superClass super

作者: Cz1024 | 来源:发表于2017-02-15 11:10 被阅读15次

    下面一道面试题:
    @implementation Son : Father

    - (id)init 
    { 
    self = [super init]; 
    if (self) { 
    NSLog(@”%@”, NSStringFromClass([self class])); 
    NSLog(@”%@”, NSStringFromClass([super class])); 
    } 
    return self; 
    } 
    @end 
    

    很多iOS面试题库中都有这一道面试题,上面的结果为Son Son .

    这里我就小记一下 class superClass super 各代表什么意思?

    class:这里代表当前方法调用者的类
    superClass:这里代表当前方法调用者的父类
    super:只是一个编译器指示符,只要编译器看到super这个标识,就会让当前对象去调用父类的方法,本质还是当前对象,所以[super class]输出的结果为Son。

    下面是一个demo

    @interface Father : NSObject
    -(void)test;
    @end
    
    @implementation Father
    
    -(void)test {
        
        NSLog(@"%@,%@",[self class],[super class]);
        
        //输出结果:Son,Son
    
    }
    
    @end
    
    下面是Son的实现方法
    @implementation Son
    -(void)test {
        [super test];
    }
    
    
    
    ViewController
    
    #import "ViewController.h"
    #import "Son.h"
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [[[SubPerson alloc] init] test];
    }
    
    

    可以看到输出结果也为Son,Son ,上面说了super只是一个编译器指示符,虽然在父类Father中输出打印,但是是子类Son调用的父类方法,所以[self class] ,[super class] 依然打印Son,Son。

    这里还涉及另外一个知识点,就是任何方法默认都有两个隐式参数(id self, SEL _cmd);

    相关文章

      网友评论

          本文标题:关于class superClass super

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