您的位置:首页 > 其它

03 继承 初始化方法 便利构造器

2014-11-23 19:08 253 查看
一 继承

1)简述

继承的上层: 父类,继承的下层:子类;

继承是单向的,不能相互继承;

继承具有传递性:A继承与B,B继承与C,A具有B和C的特征和行为;

子类能继承父类全部的特征和行为;

2)继承的实现



@interface Student :Person//学生继承Person

{
NSString *_className;
CGFloat _height;//身高
}
3)继承的特点
OC中只允许单继承;

没有父类的类称为根类,OC中的根类是NSObject(祖宗);

继承的内容:所有实例变量和方法;

如果子类不满意父类的方法的实现, 可以重写父类的方法

4)继承中方法的执行

二 初始化方法

1)简述

学习继承之前,初始化方法,没有self = [ super init]字样,我们为实例变量逐一赋值;

学习继承之后,父类中声明了公共的实例变量,作为父类,也应该有自己的初始化方法,

为这些公共实例变量赋初值;

创建对象分两步:开辟空间,初始化;

初始化方法的主要作用是:为某些实例变量赋初值

初始化方法在对象的整个生命周期里只使用一次

初始化方法中,优先向super发送init开头的消息(初始化公共变量),初始化成功后再初始化自身特有变量,从而完成全部实例变量的初始化

self = [super initWith:
name score:score]; //super 表示父类继承过来的方法 ,
self 表示自己的方法

2)初始化方法特征

- (instancetype)initWithName:(NSString *)name;

1)是" - "(对象)方法

2)类型的返回值 id 或 instancetype类型的返回值

3)方法名(init…)以init开头;

4)可以带0~n个参数

5)内部实现:先执行super的初始化方法,再初始化自身变量,return self

这里super

super是编译器指令,并非对象;

作用:给super发消息,可以执行父类中实现的方法;

直接调用父类中的某个方法;

super处在对象方法中,那么就会调用父类的对象方法

super处在类方法中,那么就会调用父类的类方法

使用场景:子类重写父类的方法时,想保留父类的一些行为

子类可以重写父类的方法,即:子类既有自己的实现,又有父类继承下来的实现,

如果想使用父类的实现,向super发送消息;

//实现自定义初始化方法
- (instancetype)initWithName:(NSString *)name
score:(CGFloat)score
className:(NSString *)className
height:(CGFloat)height
{

//1.先去使用去父类继承过来的方法

self = [superinitWith:
namescore:score];//super表示父类继承过来的方法 , self表示自己的方法

//2.判断初始化是否成功,成功后在初始化自己的实例变量

if (self) {//判断是否存在 if(self
!=nil)
_className = className;
_height = height;
}

//3.返回

return
self;
}

三 便利构造器

1)简述

便利构造器在初始化的基础上前进一小步,封装了对象创造;

变量构造器是" + "(类)方法,返回本类型的实例,方法名以类名开头person…;

可以带0~n个参数;

内部实现:封装了allco和初始化方法,使用起来更加简洁

2)实现

1)声明和实现便利构造器

+ (instancetype)personWithName:(NSString *)name
score:(CGFloat)score
+ (instancetype)personWithName:(NSString *)name score:(CGFloat)score
{
Person *person = [[Personalloc]initWith:namescore:score];
return person;
}
2)使用便利构造器创建对象

//创建一个 Person
类型的对象

Person *per = [[Personalloc]initWith:@"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: