结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~
三、类与继承
1、self
定义:方法中的一个隐藏的形参,是一个指针,谁调用当前方法,self就指向谁
(在对象方法中,self指向调用当前方法的实例对象;在类方法中,指向当前类)
作用:
(1)当前方法的局部变量和实例变量重名时,利用self来区分
(2)在方法中使用[self 方法名]来调用其它的方法,实现代码的复用。
注意要点:
(1)不能在方法中使用Self来调用当前方法,会引发死循环。
(2)类方法不能使用self来调用对象方法,对象方法中不能使用Self来调用类方法。
(3)在类方法和对象方法中都不能使用self来调用普通函数。
(4)self只能出现在方法(类方法和对象方法)中。
2、继承
a、继承概念:通过扩展或者修改既有类来定义新类的方法。被继承的类称为父类,通过继承关系新建的类称为子类
b、NSObject类:基类(根类)
->OC中所有的类都必须直接或者间接的继承自NSObject;
c、继承语法:(为什么要用继承的原因)
->子类继承父类所有特性,父类的数据成员和成员函数自动成为子类的数据成员和成员函数;
->追加新的方法;
->追加新的实例变量;
->重新定义父类中的方法(重写,改变类的默认行为)
d、继承优点(作用):
->建立类与类之间关联;
->子类继承父类的所有实例变量和方法,避免了重复代码的出现,实现代码复用
继承缺点:
->父类和子类的关系紧密,耦合性强,如果删除父类,则子类不能单独存在
e、使用注意要点
->子类中不能定义和父类相同名称的实例变量;
->子类重写,方法声明必须与父类的完全一致,通过子类实例对象调用该方法时,优先调用子类的方法;
->父类不能调用子类的对象方法;
f、self在继承关系中的使用:子类中用self调其他方法,若子类重写了方法,则调用子类的方法,没重写,就调用父类的方法
3、super关键字
定义:一个指针,指向父类
作用:当子类重写父类方法,但想保留父类的一些行为,使用super方法
出现在对象方法中调用父类的对象方法;类方法调用父类的类方法
4、多态
不同类的对象受到相同的消息时,也能得到不同的结果
a、概念说明
->一种类型,多种形态
->在OC中表现为父类指针可以指向父类对象,也可以指向子类对象
->直到运行期,根据父类指针实际指向的对象的类型,确定执行父类方法还是子类中重写的方法
b、多态产生的条件
->必须有继承关系;
->子类要重写父类的方法;
->父类指针指向子类对象
c、好处与限制
->好处:使用多态后,可以用父类指针操纵所有的子类对象,程序的可扩展性就会增强
->限制:父类指针不能调用子类新增的方法(只能重写的)
以下列程序分段简单说明(打印机可以黑白打印,彩色打印):
printer.m
@implementation Printer
- (void)print {
NSLog(@"打印机在打印");
}
@end
BlackPrinter.h 继承自printer.h
@implementation BlackPrinter
//重写父类的print方法
- (void)print {
NSLog(@"黑白打印机打印黑白效果");
}
@end
ColorPrinter.h 继承自printer.h
@implementation ColorPrinter
- (void)print {
NSLog(@"彩色打印机打印彩色效果");
}
@end
main.m {
Printer *printer = [BlackPrinter new];
//直接在定义的时候给出,如果要彩色就直接ColorPrinter
[printer print];
}
output:黑白打印机打印黑白效果
5、继承与组合
继承:XX是一个XX(is a),例如一个学生是一个人
组合:XX拥有一个XX(have a),例如一个学生拥有一个成绩对象