我目前有一个已经拥有超类的类。我意识到我也想从不同的现有类中调用方法,但是没有将它定义为超类。是否可以为我现有的子类分配第二个超类,或者这是不可能的。
如果有可能,我该怎么做呢。如果不可能,那么解决方法是什么?
答案 0 :(得分:3)
这是不可能的。 Objective-C是单继承。
根据您的具体情况,组合可能是解决此问题的正确模式:假设您有Foo类,并且您还希望Foo实例从类Bar继承行为。
您可以将Bar的实例保留为Foo中的实例变量,并将方法调用委托给它。因为Objective-C是动态类型的,所以您可以简单地将您的Foo实例转换为Bar的实例,并将其传递给任何期望Bar的代码。只要Foo响应Bar所做的所有相同方法,没有人会知道其中的差异。
如果你想获得幻想(或者如果Bar有太多的方法并且你不想写出每个方法),你可以使用消息转发将你的Foo类无法识别的任何消息传递给Bar实例。查看forwardInvocation:
上的文档,了解其工作原理。
答案 1 :(得分:1)
Objective C不支持多重继承,但您可以通过使用接口来实现此功能。