OC开发之——多态(20)

一 概念

  • 某一类食物的多种形态
  • OC对象具有多态性

二 多态的用法

2.1 设计三个类,Animal,Dog,Cat

  • Animal是父类,里面有个eat方法
  • Dog和Cat继承自Animal,是子类

2.2 类的声明与定义

  • Animal父类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @interface Animal:NSObject
    -(void)eat;
    @end
    @implementation Animal

    -(void)eat
    {
    NSLog(@"Animal吃东西----");
    }
    @end
  • Dog子类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @interface Dog : Animal
    -(void)run;
    @end
    @implementation Dog
    -(void)eat
    {
    NSLog(@"Dog吃东西----");
    }
    -(void)run
    {
    NSLog(@"Dog----跑起来");
    }
  • Cat子类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @interface Cat : Animal
    @end
    @implementation Cat

    -(void)eat
    {
    NSLog(@"Cat吃东西----");
    }
    @end

三 多态

3.1 代码体现

1
2
Animal *ani=[Dog new];
[ani eat];

3.2 代码说明

  • 子类对象赋值给父类指针
  • 父类指针访问对应的属性和方法

3.3 多态的好处

  • 用父类接受参数,节省代码

3.4 多态的局限性

  • 不能访问子类的属性(可以考虑强制转换)

3.5 多态的细节

  • 动态绑定:在运行时根据对象的类型确定动态调用的方法