1.多态实质:父类类型的指针指向子类的类型(继承的关系下)
父类类型 *p=[子类类型 new] [p 方法]
链接的时候,会动态的检查p的真实类型,所以执行的方法是子类的实现(即不管父类类型是什么,该代码都会执行成功)
2.局限性:父类类型的变量不能直接调用子类的方法(如上)
原因:oc的弱语法,会使得上述代码在编译期有一个警告,同时也能正常的运行,但这样写不是很好
3.解决局限性:强制将父类类型的变量转化成子类类型
子类类型 *p2=(子类类型 *)p
4.多态好处:减少代码量
5.内存解析
a. 父类类型 *p=[子类类型 new] //实质,定义一个父类类型的指针指向一个子类的对象,该指针的地址就是子类对象的内存地址
b. 子类类型 *p2=(子类类型 *)p //定义一个子类的指针变量,该指针变量指向父类的指针变量内存,即该子类指针的内存地址就是子类对象的内存地址
c. [p2 方法] //所以,p2实际上就是代表子类的对象,即调用子类对象的方法
注:若b不进行强制转化,编译也会有警告的。