一 继承
1.OC 中得继承特定
/*
1.单向继承,一个子类只能有一个父类,一个父类可以有很多个子类;
2.单根继承:根类(基类)是 NSObject.
3.子类可以继承父类的特征和行为.
*/
2. 建立继承关系之后,子类可以继承父类:
/*
// 1.实例变量,@ public 和@ protect 修饰的
// 2.公开的方法
1⃣ 一个方法如果在*.h 中声明了 那么就是公开的方法
2⃣ 一个方法如果没在*. h 中声明 那么就是私有方法 只有在类的内部访问
3⃣: OC 中么有决定的私有
*/
3.子类调用方法的过程
/*
1.现在本类中寻找方法 如果找到 直接调用
2.没有找到 就在父类中寻找 如果还没找到 就依次向上去父类的父类中找 直到找到
3.还找不到就报错
*/
4.// super :编译指令,用于调用父类的方法
/*
1.完全重写;不调用super 就是完全重写
2.在父类的基础上,添加我们需要的功能,补充功能.(super) 我们使用这个 super 调用父类的方法
3.重写父类的方法,在子类中不需要声明
5.//重写 init 的方法:
/*
1.初始化自己和父类的实例变量赋初始值
缺点 需要关心父类的实例变量 父类太多了 就会很麻烦
- (id) init{
_name = @"" ;
_age = 16;
_weight =70;
_sex = @"男";
_color = @"白色";
return self;
}
2.不考虑父类 只初始化自己的类
缺点 只给本类的的实例变量赋值 从父类继承的实例变量没有得到赋值
- (id) init{
_color = @"白色";
return self;
}
3.初始化时,每个类先通过调用[ super init]调用父类的方法,对父类的实例变量赋值,再对自身的实例变量赋值
理论可行
-(id)init{
[super init]; // error
_color = @"肉色";
return self;
}
4. 使用 self 接收[ super init ]的返回值,然后判断 self 是否为 nil ,如果不为 nil 说明初始化成功 ,在对自身的实例变量进行初始化
- (id) init{
// 1.在对象方法中 self ,指的的就是对象.
// 2.在类中 self 指的就是类
self = [super init];
if (self != nil){
_color = @"粉红";
}return self;
}
5下面两种是不同的形式 都可以使用 看个人爱好 一定要记得最好加上 return self 谁调用 返回谁
- (id)init {
if (self = [super init]) {
_color = @"橘色";
}return self;
}
- (id)init {
self = [super init]
if (self) {
_color = @" 透明";
}return self;
}
二 //遍历构造器
1. /*
1.一定是一个类方法
2.类名(小写)+With+实例变量名(首字母大写) appleWithColor;
3.一定有返回值
4.返回值类型(id ,instancetype);
*/
ps :+(id)appleWithColor:(NSString *)color
kind:(NSString *)kind
price:(CGFloat)price;
上面的遍历的自定义
- (id)initWithColor:(NSString *)color
kind:(NSString *)kind
price:(CGFloat)price{
self = [super init];
if (self) {
_color = color;
_kind = kind;
_price = price;
}return self;
}