OC多态

OC面向对象—多态

OC面向对象—多态
一、基本概念
多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。
在使用多态是,会进行动态检测,以调用真实的对象方法。
多态在代码中的体现即父类指针指向子类对象。
Animal类的声明


Animal类的实现

Dog类继承自Animal类

Dog类的实现

测试程序:

二、使用注意
代码分析:
Dog *d=[[Animal alloc] init]; 动物是一条狗?语义正确吗?
NSString *str=[Dog new]; 狗是一个字符串?正确吗?

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

  • 多态的好处:
    需要一个新的函数专门用来喂狗
    Void feed(Dog *d){
    [d eat];
    }
    如果这个时候也需要喂猫,那就应该重写新一个新的函数
    Void feed(Cat *c){
    [c 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个字节。
提示:字数也包括空格。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,277评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,100评论 0 4
  • 2014年的苹果全球开发者大会(WWDC),当Craig Federighi向全世界宣布“We have new ...
    yeshenlong520阅读 2,322评论 0 9
  • 我也知道 理智很乏味 清醒最孤独 我也明白由着性子胡来的快感 如果付得起其中惨痛代价 你当然可以始终任性 永远妄为...
    哀慕熙荣阅读 269评论 0 1
  • 函数: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 定义和调用 定义:Def函数名(参数)...
    界面大叔阅读 313评论 0 0