iOS開發--Objective-C的多繼承

這是我個人的學習筆記 , 如有不同見解歡迎評論交流 .

( 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 的屬性和方法名沖突依然需要自己解決 .

  • 總結

其實個人覺得 , 多繼承和繼承都能用組合模式來取代 , 而且組合模式更解耦不是嗎 ?!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容