Skip to content

理解super,superClass,class,self的含义 #19

Open

Description

@cssoul

super,superClass,class,self这几个关键词在代码中随处可见,虽然我编码中也会经常使用到它们,但实际上并没有真正理解它们的含义。

先创建两个类,一个 Father 类,另一个继承自 Father 的 Son 类。

1、在父类定义一个类方法:

+ (void)test
{
    NSLog(@"%@, %@, %@, %@",[self class],[self superclass],[super class],[super superclass]);   
}

然后直接使用 [Father test]调用:

打印结果: Father, NSObject, Father, NSObject

2、接着在子类的 Son .m 中重写父类的test 方法:

+ (void)test
{
    NSLog(@"%@, %@, %@, %@",[self class],[self superclass],[super class],[super superclass]);   
}

然后直接使用 [Son test]调用:

打印结果: Son, Father, Son, Father

3、最后将子类的 Son .m 中test 方法改写为:

+ (void)test
{
   [super text];
/*
子类调用的本方法回到父类的 test 方法中;但同时 super 还是代
表的子类 son; 也就是说在调用父类的 test 的方法时还是子类对象在调用;
*/
}

然后使用 [Son test]调用:
打印结果: Son, Father, Son, Father

总结:

  • super:是编译器指示符,仅仅是一个标志,并不是指针,仅仅是标志的当前对象去调用父类的方法,本质还是当前对象调用;super:并不是让父类对象调用方法,调用者还是本身;
  • class:获取方法调用者的类;
  • superClass: 获取方法调用者的父类;
  • self: 代表当前对象;也就是在哪个类里调用了就代表哪个类的对象;

Activity

  1. changed the title [-]iOS — 理解super,superClass,class,self的含义[/-] [+]理解super,superClass,class,self的含义[/+] on Jul 31, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions