2

我目前有一个已经有超类的类。我意识到我也想从不同的现有类中调用方法,但没有将它定义为超类。是否可以为我现有的子类分配第二个超类,或者这是不可能的。

如果可能的话,我将如何去做。如果不可能,有什么解决方法?

4

2 回答 2

3

这是不可能的。Objective-C 是单继承。

根据您的情况,Composition可能是解决此问题的正确模式:假设您有类 Foo,并且您还希望 Foo 的实例从类 Bar 继承行为。

您可以将 Bar 的实例作为实例变量保存在 Foo 中,并委托方法调用它。因为 Objective-C 是动态类型的,所以您可以简单地将 Foo 的实例转换为 Bar 的实例,并将其传递给任何需要 Bar 的代码。只要 Foo 响应所有与 Bar 相同的方法,没有人会知道其中的区别。

如果您想变得花哨(或者如果 Bar 有太多方法并且您不想写出每个方法),您可以使用消息转发将您的 Foo 类无法识别的任何消息传递给 Bar 实例。查看文档forwardInvocation:以了解其工作原理。

于 2012-11-26T07:08:47.680 回答
1

Objective C 不支持多重继承,但您可以通过使用接口来实现此功能。

于 2012-11-26T07:05:31.507 回答