Objective-C(三、类与继承,基类,self、super关键字,多态,组合)——iOS开发基础

结合之前的学习笔记以及参考《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),例如一个学生拥有一个成绩对象

你可能感兴趣的:(继承,多态,oc,ios开发基础,self与super)