【问题标题】:Protocol is also inherited in obj-c?obj-c 中也继承了协议?
【发布时间】:2012-05-16 09:02:04
【问题描述】:

我的问题是理论上的。在 obj-c 中,如果一个类实现了一个协议:

@interface Class:NSObject<protocol>

第二个类继承自第一个类:

@interface Class2:Class

Class2 是否实现了协议?我想创建一个具有多个实现的接口。我通过定义一个父类来实现这一点,该类实现一个协议,该协议包括所有应该实现的方法。因此,如果子类未实现协议规定的所有方法,我希望子类化父类的程序员收到警告。顺便说一句,如果对响应很重要,我将实现一个抽象工厂来创建对象。

我阅读了一些关于抽象类的帖子,但我没有找到我的问题的答案,但其他关于实现的建议会很受欢迎。

【问题讨论】:

标签: objective-c design-patterns


【解决方案1】:

协议基本上是您的类将实现某些方法的承诺。当您对实现协议的类进行子类化时,子类也会实现该协议,因为它继承了超类的所有方法。

当您声明您的公共超类实现了您的协议​​时,如果您实际上并未为协议中的所有方法提供实现,您将收到警告。您的子类继承了所有这些实现,因此您不会在那里收到任何警告。

根据您实际构建的内容,仅使用协议来定义必须实现的接口(方法),但没有任何通用超类可能会更好。然后,当您创建一个声明实现协议的新类时,如果您尚未实现协议的方法之一,则会收到警告。

【讨论】:

  • 这是一个完美的答案!认为它在我的模型中我永远不知道它在工厂方法中创建了什么实现,这就是我继承的原因。例如,我有一个服务器类,它可以有很多实现,具体取决于所使用的通信层。所以我更喜欢 My server 是一个 Server 对象而不是 id 指针,因为当我在模型中使用时,我不想使用 ServerImplementation 对象。不知道我解释得好不好XD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
相关资源
最近更新 更多