说Objective-C,就不能不谈及继承,多态,封装,这是面向对象语言的特点,无论什么情况下也要紧紧地抓住这几点,进行理解和应用,这样你才会慢慢地建立起这几个概念,掌握好面向对象编程的技巧
一、面向对象 三大特征
封装 继承 多态
封装:对方法 以及 变量进行保护,控制外界的访问权限。
继承:类和类之间的关系 从一般 到 特殊的一个变化过程。人类 中国人类
多态:作用于不同的对象,同一个方法 有不同的实现。
二、多态
重写 重载 虚函数
重写: 首先oc面向对象语言,对象要自己实现自己的功能,其他的不要管。所以就要用到了重写,因为没有别的对象会为你服务,你自己的独立功能要自己实现。
重载: 同一个函数名称,含有不同的参数(参数的类型不同 或者是参数的个数不同或者 含有不同的的返回值。OC没有真正意义上的重载。
虚函数:方法调用的时候 不看指针 看对象 这种方式 就叫做虚函数。
1、和继承 (父类 子类) 相结合 比较重要的
//使用虚函数 不看指针看对象这种方式
//左边是个父类的指针 右边是 子类的对象
//用父类的指针 指向 子类的对象
Computer * computer = [[Laptop alloc]init];
//使用父类的指针 发送消息 走的是子类的方法
[computer run];
2、正常的使用
//id类型 指针 自带* 能够指向 继承于NSObject所有类创建的对象 泛型
id obj;
obj=[[Person alloc]init];
[obj print];
obj = [[God alloc]init];
[obj print];
obj = [[Book alloc]init];
[obj print];
三、消息机制
OC消息机制 运行时多态消息机制 运行时继承消息机制
1、编译时
编译时 就把类型确定了
2、运行时
运行时候 才把真正的类型确定了
当一个对象 发送消息的时候,先找到对象的类里面,找相应的实现方法,如果没有,向上找,到父类去找相应的实现方法。以此类推,直到NSObject类。如果在某一个类中 找到了这个方法,那么这个类就是最终确定的类型。
通过这种消息机制,在执行的阶段 消息和实现达到真正的绑定。
补充一个类型 Class 自带* 指针
isKindOfClass 以下俩个都通过了
if ([xiaoTianquan isKindOfClass:[Dog class]]) {
NSLog(@"是Dog类");
}
if([xiaoTianquan isKindOfClass:[Animal class]])
{
NSLog(@"是动物类");
}
isMemberOfClass 只有上面这个通过了 下面的没有通过
if ([xiaoTianquan isMemberOfClass:[Dog class]]) {
NSLog(@"是dog类的一员");
}
if ([xiaoTianquan isMemberOfClass:[Animal class]]) {
NSLog(@"是动物类的一员");
}