指针变量编译时只能运行编译时的方法,不能调用运行时类型的方法,即使它实际所指对象确实包含该方法。
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);