黑马程序员----oc基础笔记----多态

来源:互联网 发布:ios放置类游戏 知乎 编辑:程序博客网 时间:2024/05/18 02:08

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1、什么是多态

               多态就是某一类事物的多种形态

                              猫:猫-->动物

                              狗:狗-->动物

                              男人:男人-->人-->高级动物

                              女人:  女人-->人-->高级动物

                程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态

2、多态的条件

             多态的条件:有继承关系、有方法重写

                                       父类的声明变量指向子类对象。

         //代码体现:用父类类型的指针指向了子类对象,这就是多态

                                       狗 *g = [狗 new];

                                       动物 *a = [狗 new];

猫 *c = [猫 new];

                                        动物 *a = [猫 new];

3、多态的优点

                  多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。

                       多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。 

4、多态的实现

     代码实现及理解:

创建一个动物的类,声明部分

#import <Foundation/Foundation.h>@interface Animal : NSObject-(void)run;@end
动物类的实现部分:

#import "Animal.h"@implementation Animal-(void)run{    NSLog(@"动物在跑");}@end

创建一个继承动物类的狗类,声明部分:

#import "Animal.h"@interface Dog : Animal-(void)run; //这句话可以不写-(void)eat;@end

狗类的实现部分:

#import "Dog.h"@implementation Dog-(void)run{    NSLog(@"狗以80码的速度冲出去,没撞树上!");}-(void)eat{    NSLog(@"狗在吃东西");}@end

创建一个继承动物类的猫类,声明部分:

#import "Animal.h"@interface Cat : Animal@end

猫类的实现部分:

#import "Cat.h"@implementation Cat-(void)run{        NSLog(@"猫在爬树,被蜜蜂蛰了");    }@end

创建一个继承狗类的大黄狗类,声明部分:

#import "BigYellowDog.h"@implementation BigYellowDog-(void)run{        NSLog(@"大黄狗在跑,撞猪上了");    }@end

主函数部分:
/*  多态的概念:       不同的对象以自己的方式响应父类同名的方法,这就是多态  体现出来:        父类的指针指向了子类的对象  多态的条件:       1) 有继承关系       2)有方法重写(子类把父类的同名方法给重写了)   */#import <Foundation/Foundation.h>#import "Dog.h"#import "Cat.h"#import "BigYellowDog.h"int main(int argc, const char * argv[]) {    @autoreleasepool {                //****** 没有使用多态 ******           Animal *ani = [Animal new];              [ani run];                   Dog *d1 = [Dog new];              [d1 run];                   Cat *cat = [Cat new];              [cat run];                        //********* 使用多态 ****        //父类指针 指向了 子类对象           Animal *a2 = [Dog new];              [a2 run];                   Animal *a3 = [Cat new];              [a3 run];           Dog *d4 = [BigYellowDog new];              [d4 run];                   Animal *an5 = [BigYellowDog new];               [an5 run];                //*********** 多态的使用注意 **********           Animal *an6 = [Dog new];           //an6 Animal类型             //编译的时候会报错            [an6 eat];  //报错                //能否执行? (Dog *)an6 把an6强制转化为 Dog类型            [(Dog *)an6 eat];  //正确的                        //下面的用法是错误的             Animal *a8 = [Animal new];        [a8 eat];  //不可以,错误的用法            //骗编译器        [(Dog *)a8 eat];                            }    return 0;}


0 0
原创粉丝点击