一.多态
1.定义
对于一个父类的引用(类与类之间有一种关系,继承关系),可以指向子类,也可以指向本类.指向类型的不同,当通过此引用向对象发消息,调用的方法是不同的,此时方法的调用就是 多态.有参数多态,数组多态,返回值多态.
2.注意事项
如果创建的对象的指针类型是父类的访问方式,内存创建的方式是用的子类的元类创建的,则该对象不能访问子类里面独有的方法,只能访问继承自父类的方法,如果子类对 于父类继承过来的方法有改写,那么执行改写过后的方法.
所以对象的指针类型决定了它的内存访问方式:只能访问该指针类型对应的元类里面的方法,而创建内存时候所用到的元类决定了它具体调用的继承方法.
二.分类
1.定义
分类是对类的补充和扩展,补充和扩展的部分就是分类,它本身并不是类,而是类的一部分,是给特定的类添加能力.
2.定义形式
分类文件是有.h和.m文件的,生成的名字是***+***.h和***+***.m,中间是加号.
3.注意事项
分类里面只能声明实现方法,不能增加变量,而且扩展里面的方法优先被调用.
4.代码示例
TRPerson类继承自NSObject
@interface TRPerson : NSObject
travel是TRPerson的分类
@interface TRPerson (travel)
@implementation TRPerson (travel)
三.扩展
1.定义
扩展其实也是分类,他是分类的一种特殊形式,是没有名字的分类
2.定义形式
扩展文件只有.h文件,生成的名字是***_***.h,中间是下划线
3.注意事项
扩展的头文件里面能声明属性,变量,也能声明方法.方法的实现部分是在被扩展的对象的.m文件里的.以上三个内容均为私有,只能在.m文件里使用.相当于是用来声明私有的属性和方法.而分类里面的方法是公有的,可以被外部访问,相当于是用来声明和实现公有方法.
4.代码示例
@interface TRPerson : NSObject
@interface TRPerson ()
四.协议
1.定义
协议就是规则,定义一个协议,就相当于制定了一个规则的列表.遵守了该协议,并实现里面的方法,就拥有了一种能力.
2.定义形式
协议是定义在.h文件里的,@required声明的方法和属性必须遵守,@optional声明的方法和属性选择性遵守.,默认为@required.协议里面声明的方法是在遵守该协议的类里面实现的.具体形式:@interface 类名(分类类名):父类名<协议名1,协议名2>
3.注意事项
协议除了可以单独在一个头文件里面定义,还可以在类的头文件里面声明,后面学的UITableView里面两个重要协议UITableViewSource和UITableViewDelegate都是定义在UITableView的头文件里的.