多态

作者: 三姑姑的他大爷 | 来源:发表于2016-08-24 11:37 被阅读0次

    OC面向对象—多态

    一、基本概念

    多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。

    在使用多态是,会进行动态检测,以调用真实的对象方法。

    多态在代码中的体现即父类指针指向子类对象。

    多态的好处:

    需要一个新的函数专门用来喂狗

    Void feed(Dog *d)

    {

    [d  eat];

    }

    如果这个时候也需要喂猫,那就应该重写新一个新的函数

    Void feed(Cat *c)

    {

    [c  eat];

    }

    而狗和猫实际上都继承自动物这个类,在这里就可以使用多态来简化代码了。

    这里只需要把函数的参数写成是Animal *类型的,那么Dog和Cat类型的对象就都可以传入进来。

    调用的时候直接改变参数就可以了。

    多态的局限性:父类类型的指针变量不能直接调用子类特有的方法。

    不建议的做法~

    Animal *a=[[Dog alloc] init];

    [a run];//在Animal类中没有run方法,这里调用了狗对象的方法。

    解决方法:可以将a强制转换为Dog*类型的变量,如下:

    Dog *d=(Dog *)a;//使用强制转换,这里a和d指向的是同一个狗对象

    三、多态使用总结

    (1)没有继承就没有多态

    (2)代码的体现:父类类型的指针指向子类对象

    (3)好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。

    (4)局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。

    相关文章

      网友评论

          本文标题:多态

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