OC面向对象三大特征---多态


OC面向对象三大特征最后一个了,多态。

一 基本概念

      多态:在代码汇总的体现就是,多种形态,必须要有继承,没有继承就没有多态。

      在使用多态时,会进行动态检测,以调用真实地对象方法。

      多态在代码中得体现就是简而言之的:父类指针指向子类对象(最开始看到的时候都这么说,没理解)

     Animal类的声明

    

    Animal类的实现

    

    Dog类继承自Animal类

     Dog类的实现

    

    测试程序:

   

    注意当中的 Animal *a = [[Dog alloc]init];

    这就是父类指针指向子类对象!!!

  二  使用注意  

    代码分析:

      Dog *d = [[Animal alloc]init]; 动物是一条狗?语义正确么?

      NSString *str = [Dog new];   狗是一个字符串?正确么?

    OC语言是一门弱语法的语言,编译的时候并不会报错,所以这就要求我们在实际的开发中一定要按照既定的规范来写代码,不要写出狗是一个字符串这样的问题。


    多态的好处:

    需要一个新的函数专门用来喂狗

   Void feed(Dog *d){

       [d   eat];

   }

   这时候如果也需要喂猫,那就需要重写一个函数。

    而狗和猫实际上都继承自动物类,所以在这里就可以使用多态来简化代码了。

    这里只需要把函数的参数写成是Animal* 类,那么Dog和Cat类型的对象就都可以传入进来。

    调用的时候直接改变参数就可以了。

   

    多态的局限性:父类类型的指针变量不能直接调用子类特有的方法。

        不建议的做法~

        Animal *a = [[Dog alloc]init];

        [a run];//在Animal类中没有run方法,这里调用了狗对象的方法。

      解决方法:可以将a强制转换为Dog*类型的变量,如下:

      Dog *d = (Dog *)a;//使用强制转换,这里a和d指向的是同一个狗对象

  三 多态使用总结

     (1)没有继承就没有多态

     (2)代码的体香:父类类型的指针指向子类对象

     (3)好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用去定义多个函数来和相应地类型进行匹配了。

     (4   局限性:父类类型的变量不能直接调用子类特有的方法,如果必须调用,则必须强制转换为子类特有的方法。

   

   四 字符串补充内容

     @“234”字符串也是一个对象,属于NSString这个类。下面是对字符串对象的一些代码说明:

   字符串对象的length方法:计算的是字符串的字数,而不是想strlen函数那样,计算的是字符串。如"哈ha123"length得出的结果是6,返回unsigned long类型,而strlen函数得出  的是8,因为一个汉字占3个字节。

提示:字数也包括空格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值