如果id类型可以存储任何类型的对象,为何不把所有对象都声明为id类型?有如下几个原因
首先,将一个变量定义为特定类的对象时,使用的是静态形态。
“静态”这个词指的是这个变量总是用于存储特定类的对象。使用静态类型时,编译器尽可能确保变量的用法在程序中始终保持一致。所以编译器能够通过检查来确定应用于对象的方法是由该类定义的或者由该类继承,否则显示警告。
使用静态类型的另一个原因是它能够提高程序的可读性。考虑以下声明:
id f1;
Fraction *f1;
显然是下面的一个声明更容易理解
动态类型的参数和返回类型
如果使用动态类型来调用方法,需要注意以下规则:
如果多个类中实现名称相同的方法,那么每个方法都必需符合各个参数的类型和返回值类型。这样才能正确
例如:Fraction和Complex类都包含add:方法。Fraction类的参数返回Fraciton对象,Complex类返回Complex对象。那么
result = [myFract add: frac1];
result = [myComplex add: comp1];
这样编译器不会显示任何警告,因为result是动态类型