多态

作者: 越天高 | 来源:发表于2019-02-20 21:45 被阅读4次

    1.什么是多态?

    • 什么是多态:多态就是某一类事物的多种形态
      猫: 猫-->动物
      狗: 狗-->动物
      男人 : 男人 -->人 -->高级动物
      女人 : 女人 -->人 -->高级动物
    • 程序中的多态:父类指针指向子类对象

    2.多态的条件

    • 有继承关系
    • 子类重写父类方法
    • 父类指针指向子类对象
    狗 *g = [狗 new];
    动物 *a = [狗 new];
    猫 *c = [猫 new];
    动物 *a = [猫 new];
    
    • 表现:当父类指针指向不同的对象的时候,通过父类指针调用被重写的方法的时候,会执行该指针所指向的那个对象的方法

    3.多态的优点

    • 多态的主要好处就是简化了编程接口。它允许在类和类之间重用一些习惯性的命名,而不用为每一个新的方法命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。

    • 多态也使得代码可以分散在不同的对象中,而不用试图在一个方法中考虑到所有可能的对象。 这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行 改动,而只需要增加一个新的类和新的同名方法。


    多态的实现

    1.如何实现多态

    • Animal是父类,子类有Cat 和 Dog,子类分别重写了父类中的eat方法;实例化对象的时候可以用下面的方法:
    Animal *animal = nil;
    
    //实例化猫的对象
    animal = [Cat new];
    [animal eat];
    
    //实例化狗的对象
    animal = [Dog new];
    [animal eat];
    

    3.多态的注意点

    • 1)如果存在多态,父类是可以访问子类特有的方法
    假设 子类 Dog 有一个特有的方法bark
    [dog bark];
    Animal *an2 = [Dog new];
    [(Dog*)an2 bark]; //把父类的指针,强制类型转换
    
    • 2)如果不存在多态,父类是不可以访问子类特有的方法的
    Animal *an3 = [Animal new];
    [(Dog*)an3 bark]; //错误的,不能强制转换
    

    相关文章

      网友评论

        本文标题:多态

        本文链接:https://www.haomeiwen.com/subject/wkvkyqtx.html