一、继承
继承的特点
OC中只允许单向单继承。
NSObject:OC中的根类,没有⽗类的类称为根类
继承的内容:⼦类能继承⽗类全部的特征和⾏为, 但父类中private修饰的变量、未在.h中声明的方法不可访问。
注意:当子类继承父类时,子类可以不重新声明方法。当 子类调用从父类继承的方法时,不是在调用父类的方法,而是调用自己的,只是父类提供了实现方式
继承中⽅法的执⾏
给CollegeStudent对象发送消息: study
1、查找本类中是否实现(重写)study⽅法。
2、如果没有,查找⽗类中study是否实现。
3、逐级向上查找,找到即执⾏。
4、如果NSObject也没实现,会抛出异常,引起Crash
[super 方法名]
super是编译器指令,并⾮对象。
作⽤:通知编译器去父类中查找某个方法的实现,子类使用查找到的实现代码。
[self 方法名]
作用:在类的内部调用自己的方法
在实例方法中,self表示调用这个方法的对象,self只能调用实例方法,不能调用类方法
在类方法中, self表示调用这个方法的类,只能调用类方法,不能调用实例方法
没有私有方法
只实现不声明(OC中没有私有方法的概念,可以实现类似的功能):不提供给类的外部及子类使用
二、初始化方法
完整初始化方法
- (id)init {
self = [super init];
// 如果初始化失败,返回nil,不再对自身声明的实例变量进行初始化设置
if (self) {
}
return self;
}
初始化过程
1. ⾃⼰的初始化⽅法中,优先调⽤⽗类的初始化⽅法
2. ⽗类的初始化⽅法中再调⽤⽗类的初始化⽅法,依次往上调⽤
3. 处于最上层的初始化完成之后,回到第⼆层的初始化⽅法中,
完成第⼆层的初始化。
4. 第⼆层的初始化完成之后,回到第三层的初始化⽅法中,依次
执⾏初始化⽅法,直到本类的初始化⽅法完成。
三、便利构造器
声明及实现
+ (id)studentWithName:(NSString *)name school:(NSString *)school;
+ (id)studentWithName:(NSString *)name school:(NSString *)school
{
return [[Student alloc] initWithName:name school:school];
}
特点
封装了alloc和初始化⽅法。使⽤起来更加简洁。
简答题:
1、OC中能不能多继承?子类继承得到了哪些内容?OC中的根类是什么?
2、自定义一个Person类的便利构造器方法。
3、super有什么作用?
4、类方法中的self和实例方法中的self分别表示什么?