OC多态详解

 

1、多态(多种形态)。实现多态的前提是实现继承,没有继承就没有多态。因为多态的体现形式就是父类指针指向子类对象。常用这种方式:父类名  *p=[子类名  new];

2、利用多态,指向子类对象的父类指针能直接调用子类中重写父类的方法。当给指向子类对象的父类指针发送消息时,系统会启动动态检测来判断对象的真实类型,进而调用这个真实类型的方法。

3、多态的好处:首先在一个函数中有一个父类指针类型的形参,这就意味着可以传入父类以及所有子类的对象。当这个父类指针的形参在函数体内调用被所有子类重写的方法时,传入的是哪个父类对象就能调用哪个父类对象的方法,传入哪个子类的对象就能调用哪个子类的方法。从而使用不变的代码可以实现不同的操作,节省了代码。

4、所有的OC方法都是默认为虚函数。

5、多态的限制:不能使用指向子类对象父类指针来调用子类扩展的方法(父类中没有的方法),因为OC是弱语法,所以仅仅是警告,仍然能运行成功,但是不建议这么做。

6、多态限制的解决方法:如果想用指向子类对象的父类指针来调用子类扩展的成员方法,可以用强制转换类型的方法。这时可以把指向子类对象的父类指针强制转换为相应的子类指针,这样就可以直接调用子类扩展的方法了。格式如下:

Animal *aa=[Dog new]; Dog *dd=(Dog *)aa;

转换语法:{ 相应子类名 *   p=(父类名 *)指向子类对象的父类指针;}

类型转换是做给编译器看的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值