OC语言7—多态
来源:互联网 发布:淘宝充气娃娃哪家好 编辑:程序博客网 时间:2024/06/05 18:17
一、基本概念
多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。
在使用多态是,会进行动态检测,以调用真实的对象方法。
多态在代码中的体现即父类指针指向子类对象。
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指向的是同一个狗对象
三、多态使用总结
没有继承就没有多态
代码的体现:父类类型的指针指向子类对象
好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。
局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
四、字符串补充内容
@“234”字符串也是一个对象,属于NSString这个类。下面是对字符串对象的一些代码说明:
字符串对象的length方法:计算的是字符串的字数,而不是像strlen函数那样,计算的是字符数。如“哈ha123”length得出的结果是6,返回unsigned long类型,而strlen函数得出的结果是8,因为一个汉字占3个字节。
提示:字数也包括空格。
- OC语言7—多态
- OC语言---封装,继承,多态
- 【黑马程序员】【OC语言】多态
- 黑马程序员-OC语言-多态
- OC语言——block
- OC语言——protocol
- OC语言— super用法
- OC语言—self用法
- OC语言5—封装
- OC语言6—继承
- 黑马程序员——OC语言——多态
- 黑马程序员——OC语言------继承、多态
- oc语言
- OC 语言
- OC——1.OC与c语言对比
- OC 语言学习第一天—OC 语法概览
- IOS开发---OC语言-⑩多态
- 黑马程序员 -- OC语言 封装 继承 多态
- 回溯法——combination-sum、combination-sum-ii
- JVM性能调优2:JVM性能调优参数整理
- :Hadoop、NoSQL、分布式、lucene、solr、nutch kafka入门:简介、使用场景、设计原理、主要配置及集群搭
- js根据数组对象中某属性进行排序
- Linux挂载移动硬盘
- OC语言7—多态
- 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
- CydiaSubstrate的简单使用
- #MYSQL表的增删
- 模糊查询防注入
- 第十三周项目3形状类族中的纯虚函数
- sqlserver查询树表某个节点所有的子节点
- LOG规范
- Kafka入门经典教程