第八章 动态绑定和 id 类型

第八章 动态绑定和 id 类型 //*************************************************************************************//

#import "Fraction.h"
#import "Complex.h" //两个类中都含有 print 方法 int main(int argc, char *argv[])
{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Fraction *f = [[Fraction alloc] init];
Complex *c = [[Complex alloc] init];
id dataValue; //声明 dataValue为 id 类型

//对对象的成员变量赋值
[f setTo:2 over: 5];
[c setReal:10.0 andImaginary: 2.5];

dataValue=f; [dataV alueprint]; dataValue=c; [dataV alueprint];

//将Fractionf 存储到dataValue中
//现在 dataV alue可以调用用于 Fraction 对象的任何方法 //将Complexc 存储到dataValue中
//调用用于 Complex 对象的任何方法

//问题:两次遇到 [dataV alueprint]; 并且 Fraction 和 Complex 类中都定义有 print 方法,系统如何知道 调用哪个?

//答案:在程序执行期间,当系统准备将 print 消息发送给 dataV alue时,它首先检查 dataV alue中存储 的对象所属的类。

[f release];

[c release];

[pool drain];

return 0;

} //************************************************************************************//

你可能感兴趣的:(第八章 动态绑定和 id 类型)