定义为父类的指针而初始化为其子类,这样因为子类可能重写父类的方法。相同类型的变量在调用同一个方法时就可能会出现多种不同的行为特征。
指针变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。因此,编写OC代码时,指针变量只能调用声明该变量时所用类中包含的方法。而不能调用其初始化的类(运行时类型)的方法。
不过可以使用performSelector:来调用。
向上转型(upcasting):
把子类对象赋给父类指针变量,总会成功 但将父类赋给子类时,可能会出错
指针变量的强制类型转换
只是改变了改制真变量编译时的类型,但改变量所指向对象的实际类型不不会发生任何改变。如果不加判断的甲乙转换,转换出来的变量在调用方法时就会引发错误。
判断指针变量的实际类型:
-(BOOL)isKindOfClass:clazz: 判断该对象是否为clazz或其子类的实例
-(BOOL)isSubclassOfClass:clazz:判断该对象是否为clazz的子类的实例