1.继承的特性:
- 继承是单向的
- 继承是可传递的
- 不能相互继承
- 继承:就是子类继承父类的方法和实例变量
- 继承的好处:减少代码量 提高工作效率
2.继承中方法的调用
- 使用self调用方法的时候:
优先调用本类中的方法 没有继续查找上一级,找到就调用,没有继续查找,都没有程序崩溃
- 使用super调用方法的时候:
直接跳过本类去查找上一级的父类,找到就调用 没有就继续查找 都没有程序崩溃,super没有特殊的意义 就是一个 编译指令
3.继承中自定义初始化方法的使用
赋值 实例变量的时候 需要先判断一下继承是否成功
也就是调用父类的初始化方法
// 方法声明
- (instancetype)initWithName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age number:(NSInteger)number;
// 方法实现
- (instancetype)initWithName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age number:(NSInteger)number{
// 继承中 的自定义初始化方法
// 赋值 实例变量的时候 需要先判断一下继承是否成功
// 也就是 调用父类的初始化方法
self = [super initWithName:name sex:sex age:age];
if (self) {
// 如果继承成功的话 就继续初始化 子类中特有的实例变量
_number = number;
}
// 继承失败 直接返回就行 空
return self;
}
4.便利构造器:
便利构造器在初始化⽅法的基础上前进了⼀⼩步。封装了对象创建过程。便利构造器是“+”⽅法,返回 本类型 的实例,⽅法名以类名开头。可以有0到多个参数。
// 方法声明
+ (instancetype)studentWithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number;
// 方法实现
+ (instancetype)studentWithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number{
Stundet *stu = [[Studeng alloc] initWithName:name sex:sex number:number];
return stu;
}