首页 > 代码库 > 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-吃东西----

 二.多态总结

  1. 没有继承就没有多态
  2. 代码的体现:父类类型的指针指向子类对象
  3. 好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
  4. 局限性:父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

 

OC三大特性之多态