self和super

self和super

  • super和self指向是同一个对象
  • 对象的初始化(NSobject)类中就有init方法可以不用声明 直接实现
- (id)init {
     self = [super init] ;//初始化父类对象
     if (self) {
         //初始化
     }
     return self ;
 }

self

  • self表示当前方法的调用者
  • 在类方法中self表示类 在对象方法中self表示对象
  • self是方法隐藏的参数变量,指向当前调用方法的对象

super

  • super在类中的方法代替父类,用来调用父类
  • super不是隐藏的参数,他只是一个编译器指示符,查找方法时,指定方法查找的位置在父类
#import <Foundation/Foundation.h>
//声明一个People类 NSobject为父类
@interface People : NSObject

@end

//实现一个People类 
@implementation People
//初始化
- (id)init {
    self = [super init] ; //super调用NSobject父类 因为NSobject中有init方法所有可以不用在声明部分声明
    if ( self ) {
        NSLog(@"*******") ;
    }
    return self ;
}

@end
//声明一个Student类 继承People类
@interface Student : People

@end
//实现一个Student类
@implementation Student
//初始化
- (id)init {
    self = [super init] ;
    if ( self ) {
        NSLog(@"#######") ;
    }
    return self ;
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        People *peo = [[People alloc]init];
        
        Student *stu = [[Student alloc]init];
        
    }
    return 0;
}

程序运行结果

*******//程序运行先执行创建的People类 输出*
*******//在执行Student类时,因为它继承People,先调用父类 输出*
#######//再输出#


猜你喜欢

转载自blog.csdn.net/twier_/article/details/80638682