首页 > 代码库 > OC三大特性之多态
OC三大特性之多态
一.基本概念
多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象。
如果函数或参数中使用的是父类类型,可以传入父类、子类对象,但是父类类型的变量不能直接调用子类特有的方法。
Animal类的声明和实现
// 动物@interface Animal : NSObject- (void)eat;@end@implementation Animal- (void)eat{ NSLog(@"Animal-吃东西----");}@end
Dog类继承自Animal类
// 狗@interface Dog : Animal- (void)run;@end@implementation Dog- (void)run{ NSLog(@"Dog---跑起来");}//重写Animal的eat方法- (void)eat{ NSLog(@"Dog-吃东西----");}@end
#import <Foundation/Foundation.h>// 动物@interface Animal : NSObject- (void)eat;@end@implementation Animal- (void)eat{ NSLog(@"Animal-吃东西----");}@end// 狗@interface Dog : Animal- (void)run;@end@implementation Dog- (void)run{ NSLog(@"Dog---跑起来");}- (void)eat{ NSLog(@"Dog-吃东西----");}@end// 如果参数中使用的是父类类型,可以传入父类、子类对象void feed(Animal *a){ [a eat];}int main(){ // 多态:父类指针指向子类对象 Animal *a = [Dog new]; //调用方法时会检测对象的真实形象 [a eat]; return 0;}
结果:Dog-吃东西----
二.多态总结
- 没有继承就没有多态
- 代码的体现:父类类型的指针指向子类对象
- 好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
- 局限性:父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法
OC三大特性之多态
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。