2012-05-16 27 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