objective-c之多态

一、多态的基本概念

多态在代码中的体现,即为多种形态,必须要有继承,没有继承也就没有多态。
在使用多态的时候,会进行动态监测,以调用真实的对象方法。
他在使用时即可理解为父类指针指向子类对象。

1、Animal类的声明
2、Animal类的实现
3、Dog继承自Animal类
4、Dog类的实现
测试程序


二、多态的使用注意

1、多态的好处
如果我们现在有Dog类,这个类都需要实现feed这个操作,那么我们就需要一个新的函数来feed Dog.
Void feed(Dog *d)
{
[d eat];
}
假如这时候还有一个Cat类,也需要feed这个函数,那么我们就应该重写一个新函数。
Void feed(Cat *c)
{
[c eat];
}
那要以后再有新的类,我们还需要再去定义函数,非常麻烦。可是利用多态,因为Dog和Cat都是继承自Animal这个类,所以我们可以利用多态来进行简化。这里只需要把函数的参数写成是Animal *类型的,那么Dog和Cat就都可以传进来了,到时候调用直接改变参数就可以了。

2、Objective-c弱语法的体现:
Oc是一门弱语法,很多的时候,不正确的代码,编译运行也都能通过,所以我们初学者在开发的时候一定要注意,不能使用如下语句:
 
1> Dog * = [Animal new]; 他的意思动物是一条狗吗?显然不对。
2> NSString * = [Dog new]; 狗是字符串吗?显然不对。
所以以后绝对不能写这样的代码。

3、多态的局限性
父类类型的指针不能直接调用子类特有的方法。
【不建议的写法】
Animal *a = [Dog new];
[a run]; // Animal中没有run方法,这里是调用了狗对象的方法
【解决办法】 我们可以将a强制转换为Dog* 类型变量“
Dog *d = (Dog *) a; // 使用强制转换; 这里的a和d都是指向了Dog对象。

2、Objective-c弱语法的体现:
三、多态的使用总结

1、没有继承就没有多态
2、代码体现:父类指针指向子类对象
3、好处:如果函数方法参数中使用的是父类类型,则可以传入父类或子类对象,而不必去定义多个函数来和相应的类进行匹配
4、局限性:父类类型的变量不能直接调用子类特有的方法,如果必须调用,则需要强制转换为子类特有的方法


2 、Objective-c弱语法的体现:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值