第八章 动态绑定和 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;
} //************************************************************************************//
网友评论