2012-05-16 29 views
0

我的問題是理論上的。在對象 - 如果一個類實現了一個協議:協議也是在obj-c中繼承的?

@interface Class:NSObject<protocol> 

而第二類從第一繼承:

@interface Class2:Class 

不Class2中實現協議?我想創建一個具有多個實現的接口。我通過定義一個實現包含所有應該實現的方法的協議的父類來做到這一點。所以我希望如果子類沒有實現協議規定的所有方法,子類化父類的程序員會收到警告。順便說一下,如果對響應很重要,我會爲對象創建實現一個抽象工廠。

我閱讀了一些關於抽象類的文章,但我沒有找到我的問題的答案,但其他關於實現的建議將很受歡迎。

+1

這將幫助你 - http://stackoverflow.com/questions/1034373/creating-an-abstract-class-in-objective-c – rishi

+0

可能的重複:[可以ObjC協議和類別被繼承](http:///http://blog.csdn.net/shenzhen/article/details/670994/),[ObjC protocols usage](http://stackoverflow.com/questions/7617615/),[子類是否繼承其父類的協議?](http:// stackoverflow (協議可繼承?)(http://stackoverflow.com/questions/2971843/) –

回答

3

協議基本上是一個承諾,你的班級將實施某些方法。當你實現一個協議的子類時,子類也實現了該協議,因爲它繼承了所有超類的方法。

當您聲明您的公共超類實現您的協議時,如果您實際上未提供協議中所有方法的實現,則會收到警告。你的子類繼承所有這些實現,所以你不會在那裏得到任何警告。

根據實際構建的情況,僅使用協議來定義必須實現的接口(方法),但沒有任何公共超類可能會更好。當你創建一個聲明實現該協議的新類時,如果你還沒有實現協議的一個方法,你會得到警告。

+0

這是一個完美的答案!我認爲這是在我的模型中,我不知道它是在工廠方法中創建了什麼實現,這就是爲什麼我herit。例如,我有一個服務器類,根據使用的通信層可以有很多的實現。所以我更喜歡我的服務器是Server對象而不是id 指針,因爲當我在模型中使用時,我不想使用ServerImplementation對象。我不知道我是否很好地向我解釋XD – Jpellat