您的位置:首页 > 其它

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

2012-10-28 01:48 211 查看
从本篇博文 开始,我 要介绍 关于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措施。

系统 总是 会携带 哪个物件 属于 哪个类型之类的信息,这样 程序 就可以 在运行的时候 决定 采取 哪项措施,而 不需要 在编译的时候 决定了。属于不同物件类型的措施 共用 同样一个名称的特性 就叫作 多态性。有了 这种特性,你 在创建 新的物件类型时,就可以 为新的物件类型 编写 与已存在的措施同名的措施了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: