美文网首页
OC之多态

OC之多态

作者: IThai | 来源:发表于2018-03-16 11:46 被阅读0次

    OC之多态:

    多态是什么?一个类的多种形态。你可以认为就是孙悟空和他的分身。
    为什么要 分身,一个人做不到啊。

    • 比如,你自定义了一个view叫做BBview(爸爸视图),你用他来实现放大缩小,点击翻转。现在,你又需要一个view来实现只能上下方向放大缩小。然后,你还需要一个view来实现即能点击翻转,还能3d折叠。 那么你要怎么做呢?
    • 直接在BBview中加入一个3d折叠的方法,然后给三个方法分别开放enable的属性吗?用哪个让哪个enable?
      好像也可以哦。是不是傻?这就好像你本来在煮饭,然后让你再去买菜,和打酱油。你都可以做到,但是,为什么不生个孩子呢?一个不行,生俩啊。孩子A只要会打酱油,孩子B去买菜。多好。
      到项目中,也是。如果你的项目中之前一直是只有BBview,现在你突然加了个新方法,又给了3个enable的属性,那你不得去遍历之前用过这个BBview的地方,都去enable那三个属性吗?直接写个新的类出来继承,然后添加新方法,覆写旧方法,多好。

    多态,就是继承一个父类,覆写父类的旧方法,当然新写的这个类,也可以加些新方法。
    继续上边假设的情景:
    BBview有俩方法,-(void)didScal; -(void)didOvertrun;
    新加俩类,
    Aview,覆写方法(-(void)didScal;)。-(void)didAScal;
    Bview,覆写方法(-(void)didOvertrun;)。-(void)didBOverTrun;
    添加新方法。-(void)3dtransform;
    场景应用:
    原来的使用:(之前项目中,某控制器下,使用旧的BBview,实现缩放,翻转)
    [[BBview class] didScal];
    [[BBview class] didOvertrun];
    现在,你又需要一个view来实现只能上下方向放大缩小:
    BBview *aView = [Aview new];
    [Aview didAScal];
    然后,你还需要一个view来实现即能点击翻转,还能3d折叠。
    BBview bView = [Bview new];
    [bView didBOverTrun];
    [(Bview
    )bView 3dtransform];//此处需要注意,必需强转类型,因为,在父类中,没有3dtransform这个方法。

    OK,至此,多态的情况大致明了。
    现在,你既可以保证旧项目不改动,又可以满足新的需求。是不是就像在版本迭代呢?是的,多态就好像是在帮你的代码进行迭代一样,即扩展了你之前的类的方法,也保证了旧的存在。让你原本就已千疮百孔的代码还能继续匍匐前行。没有错,这也是多态的优点之一哦。

    相关文章

      网友评论

          本文标题:OC之多态

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