这是我个人的学习笔记 , 如有不同见解欢迎评论交流 .
( 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 的属性和方法名冲突依然需要自己解决 .
总结