這是我個人的學習筆記 , 如有不同見解歡迎評論交流 .
( 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 的屬性和方法名沖突依然需要自己解決 .
總結