继承、初始化方法
继承
1.基本概念
继承的上层—父类, 继承的下层—子类, 子类继承父类全部的特征和行为。
根类(NSObject): 没有父类的类
继承是单向的,不能相互继承,且OC中只允许单继承
继承具有传递性
2.Super
super是编译器指令,并非对象,而self是指针(即对象)
作用:调用从父类继承的实例方法
子类可以重写父类的方法(这个方法无需在子类中重复声明),当子类重写父类的方法后,子类会调用自己重写后的方法,如果要调用父类的方法,则需要给super发消息[super 方法名]。
初始化方法
创建对象步骤:分配空间 -> 初始化(为新开辟的空间赋值)
完整的初始化方法(3步):
子类中定义了除父类中公共实例变量之外的实例变量。在自身的初始化方法中,先向super发送init消息,初始化公共实例变量,初始化成功后,在初始化自身特有变量,从而完成全部实例变量的初始化。
// 声明自定义初始化方法( 3个参数)(指定初始化方法)
-(id)initWithNo:(int)no withName:(NSString *)name withAge:(int)age
{
// 优先调用从父类继承过来的初始化方法
self = [super initWithName:name withAge:0];
// 判断初始化是否成功,如果初始化成功,在初始化自身持有的实例变量
if (self) {
_no = no;
}
// 返回对象
return self;
}
初始化方法特征:’-’方法(实例方法);返回值是(id)或者(instancetype);init开头;可以带0~多个参数。内部实现:先执行super的始化方法,再初始化自身变量,最后返回对象 return self.
指定初始化方法:一个类含有多个初始化方法,无论执行哪个初始化方法,总有一个初始化方法被调用,这个方法就是初始化方法。一般选参数最全的初始化方法作为指定初始化方法
// 使用实例方法创建学生类对象
Student *pStu = [[Student alloc] initWithName:@"小王" withAge:18 withNo:28
便利构造器
便利构造器是’+’方法(类方法),方法名以类名开头,返回本类型的实例
内部实例:封装了alloc(开辟空间)和初始化方法(init)
// 实现方法
+(id)personWithName:(NSString *)name withAge:(int)age
{
Person *p = [[Person alloc] initWithName:name withAge:age];
return p;
}
// 使用便利构造器创建对象
Person *p = [Person personWithName:@"小王" withAge:66];