1.继承
OC中的继承特点
1.单根继承,基类(根类)是NSObject
2.单向继承,一个类只有一个父类,可以有很多的子类
(继承的上层:父类,下层:子类)
继承具有传递性,子类能继承父类全部的特征和行为
建立继承关系以后,子类可以继承父类
1.实例变量:public,protected
2.方法:公共的方法
子类可以根据自己的需要,重写父类的方法,由于父类已经声明过方法,子类重写父类的方法,只需要重写实现部分
方法调用顺序:先从本类里找方法,如果找到,就调用方法;如果没有找到,就去父类里找,一直向上查找,直到找到方法
当出现继承关系以后,*.h中可以#import父类的头文件,并且不会造成循环引用,因为OC中的继承是单向继承
2.初始化方法
(1)执行父类中实现的初始化方法。(向上递归到NSObject类中的初始化方法)
(2)从根类NSObject开始执行初始化方法。
(3)判断父类中的初始化是否成功,即self是否存在。
(4)完成对象的初始化设置,返回对象。
在自身类中,最终调用的初始化方法,称之为指定初始化方法
初始化的原则:先初始化父类,再初始化子类
例如:
- (id)init {
//初始化父类,并判断是否成功
//self是调用本身的init的方法
//super:oc中的关键字,给super发消息,可以执行父类中的实现的方法
if (self = [super init]) {
//如果成功,为自身的实例变量赋值
number = 55;
score = 90;
}
return self;
}
- (id)init {
//初始化父类,并判断是否成功
self = [super init];//
if (self) {
//如果成功,为自身的实例变量赋值
number = 55;
score = 90;
}
return self;
}
3.自定义初始化方法
把初始化和实例变量组合起来
例如:- (id)initWithNumber:(NSInteger)aNumber score:(CGFloat)aScore;
4.便利构造器
把内存分配,初始化和实例变量赋值组合起来
例如:
+(Person *)personWithName:(NSString *)aName gender:(NSString *)aGender age:(NSInteger)aAge {
//1
Person *person = [[Person alloc] initWithName:aName genter:aGender age:aAge];
return person;
//2
return [[Person alloc] initWithName:aName genter:aGender age:aAge];
}