/** 为什么父类可以访问子类继承自父类的方法,但是无法访问子类独有的方法? 1.编译器编译时: 编译器在编译时,只检查指针变量的类型,确定该指针变量类型里面有下面调用的方法,如果有该方法,编译器就认为,是正确,可以编译通过. 2.运行时:会动态监测对象的真实类型.然后,调用对象自己的方法. 父类指针指向子类对象的这种形式,叫做多态. 当父类想要访问子类特有的方法时:强制类型转换. */ #import <Foundation/Foundation.h> #import "Cat.h" #import "Girl.h" #import "Dog.h" #import "Mouse.h" int main(int argc, const char * argv[]) { @autoreleasepool { Animal *c = [Cat new]; [(Cat *)c jump]; Animal *a = [Animal new];//错误 [(Cat *)a jump]; } return 0; } // 多态的应用 void test1() { // 父类指针指向子类对象,编译的时候是左边Animal类型运行的时候是右边Cat类型。 Animal *c1 = [Cat new]; // 1.父类能否调用子类继承自父类的方法 [c1 eat]; // 2.父类能否调用子类独有的方法,强制类型转换. // [c1 jump]; }
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5310652.html,如需转载请自行联系原作者