二十八、多态性、动态类型 和 动态绑定(一)多态性:不同的措施 共用 同一个名称

从本篇博文  开始,我  要介绍  关于objective-c的三个特性。它们  分别  是:多态性、动态类型  和  动态绑定。这三个特性  使  objective-c  成为  一种非常强大的编程语言,而且  还  使  objective-c  与  其他面向对象的编程语言,比如  c++,显著不同。

在本篇博文当中,我  只  介绍  多态性。多态性  可以使  你  为  不同类型的物件  创建  名称相同  但  内容不同的措施。首先  我  创建  一类叫作Complex的物件  用来代表  复数:

Complex.h:

Complex.m:

我们  知道  比例,也就是  分数,由分子  和  分母  组成。同样的道理,复数  是  由实数  和  虚数  组成的。于是  我  在Complex.h这个文件当中  用  双精度的变量real  和  imaginary  分别  表示  实数  和  虚数,每个  Complex类型的物件  都会包含  real  和  imaginary这两个变量。除此之外  我  还  告诉  计算机  可以对Complex类型的物件  采取  print、setReal:andImaginary:  和  add:这三项措施,文件Complex.m  说明了  这三项措施的具体内容,这  跟  Fraction这类物件  大同小异。print这项措施  是  将  某个复数  显示出来,由于  objective-c  属于  c语言的超级集合,对  c语言  保持兼容,所以  这里  使用了  printf(),你  也许  已经  发现了  NSLog()  无论  显示  什么内容,都会  自动  换行。setReal:andImaginary:这项措施  用来设定  某个复数的实数  和  虚数部分。add:这项措施  是  将  两个复数  相加,add:这项措施的实施对象  就是  第一个加数,而  第二个加数  则是  这项措施的参数。

接下来  是  主程序main.m:

由于  我  需要创建  Fraction  和  Complex这两种类型的物件  分别  来代表  比例  和  复数,于是  我  在程序的开头  导入了  ”Fraction.h”  和  ”Complex.h”这两个文件,而  ”Fraction.h”  和  ”Fraction.m”这两个文件  我  在这里  就省略了。

在这个程序中  我  分别  创建了  两个Fraction类型的物件  来代表  两个比例  和  两个Complex类型的物件  来代表  两个复数。而且  我  给  两个Fraction类型的物件所代表的比例  和  两个Complex类型的物件所代表的复数  设定了  值。最后  我  将  两个比例  和  两个复数  分别  相加,并且  将  两个比例相加的结果  和  两个复数相加的结果  显示了出来。

运行  这个程序  可以得到  这样的结果:

你  只要查看一下  Fraction.h  和  Complex.h这两个文件  就会发现  Fraction  和  Complex这两个物件类型  都包含了  add:  和  print这两项措施,那么  在执行  这样的语句时:

程序  怎么知道  采取  哪个add:措施  以及  哪个print措施呢?这  很  简单:fractionOne这个物件  属于  Fraction类型,那么  就  对  其  采取  属于Fraction类型的add:措施;complexResult这个物件  属于  Complex类型,那么  就  对  其  采取  属于Complex类型的print措施。

系统  总是  会携带  哪个物件  属于  哪个类型之类的信息,这样  程序  就可以  在运行的时候  决定  采取  哪项措施,而  不需要  在编译的时候  决定了。属于不同物件类型的措施  共用  同样一个名称的特性  就叫作  多态性。有了  这种特性,你  在创建  新的物件类型时,就可以  为新的物件类型  编写  与已存在的措施同名的措施了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值