继承:把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法即可。
Student类继承了Person类,将Person类中的所有实例变量和方法都继承过来了 @interface Student : Person 只要写自己独有的实例变量 @end
继承的特点:
1、没有父类的类称作根类,OC中的根类是NSObject 2、继承是单向的,不能互相继承
3、子类继承父类所有的实例变量和方法(父类中私有的实例变量也被继承,但不能被子类访问)
4、继承具有传递性
5、一个类只有一个父类,但可以有多个子类
继承的重写:(先找自己,逐级向上查找,找到即执?。) 1、如果子类不满足父类的实现可将继承父类的方法重写。
2、声明父类继承的方法,是告诉外界,该方法是重写父类的方法
3、如果本类没有重写父类过来的study方法,则执行父类的study方法,反之,执行子类重写父类的study方法
4、方法的执行,优先从本类找方法的实现
继承方法的实现:
super:是编译器指令,并非对象
作用:给super发送消息,可以执行父类该方法的实现
[super init]
初始化方法:
1、初始化方法是对象方法即 - 方法,并且以init开头
2、初始化方法的作用是为某些实例变量进行赋值
3、一个类的初始化方法可以有多个,但是一个对象的生命周期中,初始化方法只有一次
4、id或者instancetype类型的返回值
5、可以带0或多个参数
初始化步骤:
1、向super发送初始化方法,执行父类中的初始化方法,将父类继承过来的实例变量进行初始化
2、初始化之后再将本类独有的实例变量进行初始化
3、全部实例变量初始化之后,将对象传出去
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender{
self = [super init]; // 将父类继承过来的isa初始化
if (self) {// 父类初始化成功之后,在执行自身的实例变量的初始化
[self setName:name]; // _name = name;
[self setAge:age]; // _age = age;
[self setGender:gender]; // _gender = gender;
}
return self;// 全部实例变量初始化之后,将对象传出去
}
初始化的原则:一般选参数最多的初始化方法作为指定初始化方法
self:系统关键字,self在方法中指代当前方法的调用者(外界执行此方法的对象),在类方法中指代类名。
便利构造器:封装了对象创建过程
内部实现:封装了alloc和初始化操作,创建对象更加方便快捷
便利构造器是+方法
返回本类型的实例
方法名以类名开头
可以有0或多个参数
声明: + (Person *)personWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender;
实现: + (Person *)personWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender {
/*
// 1、创建对象
Person *p = [[Person alloc] initWithName:name age:age gender:gender];
// 2、返回对象
return p;
*/
return [[Person alloc]initWithName:name age:age gender:gender];
}