【发布时间】:2013-03-15 19:16:01
【问题描述】:
我有一个 iPhone 应用,其中 A 类是 UIViewController 的子类:
现在我正在创建一个新应用程序,我想在其中重用 A,但将它从 B 子类化,这很好,因为 B 个来自 UIViewController 的子类:
但是现在我有了另一个类,C,它是GLKViewController的子类:
当我尝试制作第三个重复使用 B 而不做任何更改的应用时,问题就来了。由于 B 继承自 UIViewController,我需要以某种方式告诉 C 它应该继承自 B 并且来自 GLKViewController,我认为这是一个多重继承的例子:
根据我的阅读,处理此问题的最佳方法是使用 composition,但我不明白如何最好地将其应用于我的情况。
作为一个替代解决方案,我意识到我可以创建一个 wrapper 类 D 然后我可以逐个应用修改它以从手头任务的适当超类:
但这似乎有点老套。有没有更好的方法来做到这一点?
【问题讨论】:
-
什么是 UIScrollViewController?
-
在 UIViewController 上使用类别而不是子类化怎么样?由于 UIScrollViewController 继承自 UIViewController,因此您的类别也可以在 UIScrollViewController 实例的情况下使用。哦,这个问题的起草非常好 +1!
-
你不能在 Objective-C 中做到这一点是单继承——就像 java 使用组合或委托的范例
-
@Daij-Djan 我的意思是说你写它的方式是不正确的。对于所问问题的具体情况,您的结果是正确的。您对 iOS 不支持多重继承概念的广泛陈述是不正确的——如果您像现在一样坚持使用 Objective-C,那么您是正确的。请不要感到受到攻击——这不是我的本意。
-
@Till 你的论点非常听起来像是吹毛求疵。所有现代编程语言都变得完整的事实意味着您可以用其他所有语言来表达每种语言。这导致了一个结论,即到处都支持多重继承。它只是没有帮助,就像在这种特定情况下(子类化 Cocoa-Touch 类),我觉得声明是明智的:不支持多重继承。
标签: ios inheritance uiviewcontroller