美文网首页开发收藏iosiOS学习
iOS开发--Objective-C的多继承

iOS开发--Objective-C的多继承

作者: JohnnyB0Y | 来源:发表于2015-08-06 17:21 被阅读4379次
    这是我个人的学习笔记 , 如有不同见解欢迎评论交流 .

    ( GeekBand-极客班 http://geekband.com )
    ( 我的微博 : http://weibo.com/JohnnyB0Y )

    Objective-C本身不支持多继承 , 可是方法总是有的 .

    • 通过组合实现多继承

    假设C类要同时继承A类和B类 .
    1.C类在头文件导入A类和B类的头文件 .
    2.C类头文件声明需要继承自A类和B类已有的方法和属性 . ( 实现继承的特性 )
    3.在C类内部创建A类和B类的实例 , 变成自己的成员变量 . ( C类调用方法时 , 方法内部是用A类和B类调用自己对应的方法 )
    4.把A类和B类的属性与C类的属性存储方法关联起来 . ( C类继承自A类和B类 , 就拥有了A类和B类的能力 , 可是我们是在通过组合来实现多继承 , 所以一定要保证属性关联正确 )
    5.C类调用继承过来的方法时 , 实际内部是用A类和B类调用自己对应的方法的 .

    • 通过协议实现多继承

    假设C类要同时继承A类和B类 .
    1.C类在头文件导入A类和B类的头文件 .
    2.在A类和B类把需要被C类继承的方法和属性声明成一份协议 .
    3.C类遵守A类和B类的协议 .
    4.在实现文件中实现协议方法 , 协议属性也要实现 . ( 问题是你无法调用到A类和B类原生的方法 )

    • 组合和协议实现多继承的问题

    1.组合实现下 , 想要继承来的不管是属性还是方法都没有提示 .
    2.如果继承来的两个类中属性名和方法名相同就很麻烦了 , 要仔细区分开 .
    3.通过协议实现的多继承 , 不能调用父类的方法 .

    • 尝试解决问题

    通过把两种实现方法结合起来用 , 感觉好了不少 .
    不过问题2 的属性和方法名冲突依然需要自己解决 .

    • 总结

    其实个人觉得 , 多继承和继承都能用组合模式来取代 , 而且组合模式更解耦不是吗 ?!

    相关文章

      网友评论

      • 郑明明:Java中有interface来处理多继承,C++中本来就有多继承,Objective-C中实现多继承可以用组合和协议
      • 郑明明:学习了
      • 编号x71291:头像萌萌哒
        JohnnyB0Y:@新宛 人萌头像自然萌,才怪呢!🙈
      • JohnnyB0Y:因为写这篇笔记的目的是讨论Objective-C多继承实现方式的差异和缺陷 , 还有就是有没有必要的问题 . 所以就不上代码了 . 当然能力有限 ,可能若干时间后 我会不这么认为了 . :smiley:

      本文标题:iOS开发--Objective-C的多继承

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