关于指针变量编译和运行时

指针变量编译时只能运行编译时的方法,不能调用运行时类型的方法,即使它实际所指对象确实包含该方法。

Father* fa=[[Son alloc]init];

编译时是:Father  

运行时时:Son

解决方法: 强制转换成子类类型,这样 编译和运行时的类型就相同了

//下面编译时类型和运行时类型不一样,多态发生

FKBase* ploymophicBc=[[FKSubclass alloc]init];

[ploymophicBc base];

[ploymophicBc test];

//FKbase类没有提供sub方法,所以编译出错

//[ploymophicBc sub];

//强制转换,将编译时类型变得跟运行时一样

[(FKSubclass*)ploymophicBc sub];

NSLog(@"%@",ploymophicBc);

posted on 2015-11-28 16:39  程序修炼之道  阅读(249)  评论(0编辑  收藏  举报

导航