OC语言7—多态

转载 2016年05月31日 13:29:24

一、基本概念

多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。

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

多态在代码中的体现即父类指针指向子类对象。

Animal类的声明
image

Animal类的实现

image

Dog类继承自Animal类
image

Dog类的实现

image

测试程序:

image

二、使用注意

代码分析:

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这个类。下面是对字符串对象的一些代码说明:
image

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

提示:字数也包括空格。

image

黑马程序员————OC面向对象_三大特性之继承与多态

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、继承 有一个类A、类B,将类A的属性赋值于类B,那么类B继承类A ...

17.OC面向对象—多态

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

IOS之OC面向对象—多态

一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态是,会进行动态检测,以调用真实的对象方法。 多态在代码中的体现即父类指针指向子类对象。 ...
  • LCF_3_6
  • LCF_3_6
  • 2017年04月16日 19:24
  • 109

OC面向对象—多态

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

黑马程序员—OC(继承与多态)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------  1. 继承      设计两个类Doctor  、Student   /...
  • macau1
  • macau1
  • 2015年01月20日 12:05
  • 138

黑马程序员 _7 OC基础 继承、多态、分类

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 一、继承 1.当两个类具有公共属性和行为...
  • liuthou
  • liuthou
  • 2014年04月02日 21:02
  • 584

黑马程序员——OC语言基础:面向对象三大特性,封装、继承、多态

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、封装性 1.set方法 #import @interface Student :...
  • Big_Zzq
  • Big_Zzq
  • 2015年04月27日 18:51
  • 384

黑马程序员-OC语言-多态

什么是多态 多态:是指一种事物的多种形态.代码体现: 父类的指针指向子类的对象Dog *d=[Dog new];//普通写法 Animal *a=[Dog new];//多态写法多态有什么作用? ...

黑马程序员——OC语言------继承、多态

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 继承   一、继承的用法 继承到底有什么作用呢,以创建两种动物Cat和Dog类为例: /...
  • casono1
  • casono1
  • 2015年03月19日 17:15
  • 159

OC语言 继承和多态

继承和多态 // //  main.m //  Kiwir-OC03 // //  Created by ibokan on 15/12/10. ...
  • kiwirr
  • kiwirr
  • 2015年12月11日 18:59
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC语言7—多态
举报原因:
原因补充:

(最多只允许输入30个字)