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,先调用父类 输出*
#######//再输出#