一、多态的基本概念
多态在代码中的体现,即为多种形态,必须要有继承,没有继承也就没有多态。
在使用多态的时候,会进行动态监测,以调用真实的对象方法。
他在使用时即可理解为父类指针指向子类对象。
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弱语法的体现: