多重继承批评
回答
我认为他们的意思是一辆汽车不能从它的四个车轮继承(例如,继承四次车轮)。然而,我认为这个“省略”实际上是一个积极的特性,因为继承是用来表示子类型的,并且没有“单一类型的多重子类型”。这种“显式多重继承”不会比简单的组合更好。
同样,我已经在切换到C#的情况下,在愤怒中编写了C++超过5年。我真的不记得我是否使用了多重继承,但我不会错过它,特别是我可以编写接口,并且现在我更多地使用组合。
但是,在the best OO book ever - 可能;) - Betrand梅耶是多重继承的良好保护。他也做出类似的防守here。
实际上,在C++类可以从同一类继承多次:
类A {};公共A();公共A();公共A();公共A();公共A();公共A();公共A();公共A();公共A();公共A C类:public A();类C:公共A();公共A();公共A();公共A();公共A();公共A();公共A();公共A
clsss D:public B,public C {};
现在D结束了两个A的副本。这通常被认为是“一个坏主意”,C++提供虚拟继承来控制它。
不,这不是。 “钻石继承”在链接的维基百科页面中列为单独问题。 – 2009-02-10 12:20:07
我认为问题在于那篇特定的维基百科文章。它包含不止一个尴尬或模糊的陈述,如这些珠宝:
Tcl允许多个父类 - 它们的序列会影响类成员的名称解析。
和
然而,这些六种语言允许类从多个接口继承,再造一些,同时避免其他人提到的问题。
我坦率地不知道作者在你的问题中的意图是什么。这仅仅是一个写得很差的文章中模糊的例子,恕我直言。
这被称为Diamond Problem。大多数允许MI的现代语言为此提供了解决方案。
总之,你有这样的分类:
class A { public int f = 0; };
class B extends A { f = 1; };
class C extends A { f = 2; };
class D extends B, C {};
会有什么D.f打印?如果你把一些价值放在D.f中,它应该存储在哪里? B(A).f和C(A).f这两个字段应该合并为一个还是应该保持独立?如果你在B和C中重写A的方法x,D.x()应该做什么?同时打电话?按何种顺序?什么是回报价值?
那是什么语言? – curiousguy 2011-11-01 03:09:45
多继承是面向对象编程的GOTO。它起因于早期的OOP语言(C++等)采用的方法。它在右手中运行良好,但其他时间大部分时间都会混淆。
OOP的主要目标之一是重用行为。这原来是一个嵌合体。在某些情况下有用,但在其他情况下,我们真正感兴趣的是定义对象如何相互作用。看看设计模式中有多少模式使用接口而不是继承。
实现接口,然后显式聚合更清晰,更可维护多种继承所做的相同事情。几乎所有的OOP都有一些定义接口的方法,几乎所有的OOP都可以将对象聚合在一起。然而,OOP以微妙的不同方式处理由多重继承(钻石问题等)引发的问题。使用多重继承来查看代码时,像GOTO一样,不清楚发生了什么。然而像GOTO一样,它可以在不同的情况下有用。
对我来说,使用任何困难的语言结构的主要考虑因素是我是否必须长期维护应用程序。如果我这样做,那么即使现在需要更多的编程,我也会选择最清晰,更容易维护的方法。像所有其他事情一样,这是一个判决电话。请注意,大部分时间我们都会坚持我们开发的程序比我们想象的要长得多。
- 1. 多重继承
- 2. 多重继承
- 3. 多重继承()
- 4. 多重继承
- 5. C++多重继承
- 6. 多重继承:2Classes1Method
- 7. Python的多重继承
- 8. 多重继承ambigious功能
- 9. 多重继承:QGraphicsPixmapItem和QGraphicsTextItem
- 10. Objective-C多重继承
- 11. gcc thunk hack多重继承
- 12. Java的多重继承ActionBarActivity
- 13. Codeigniter和多重继承
- 14. C#多重泛型继承
- 15. 继承和多重构造
- 16. 接口的多重继承
- 17. 多重继承层次
- 18. LINQtoSQL中的多重继承?
- 19. 暧昧多重继承
- 20. 多重继承的分类?
- 21. 风格的多重继承
- 22. wxPython和多重继承
- 23. Ruby中的多重继承...继承自多个控制器类。
- 24. 使用QThread和QWidget进行多重继承(使用QObject进行多重继承)
- 25. 接口评论和继承
- 26. 用重写模仿多重继承
- 27. 多重继承和多态性
- 28. 更多C++多重继承的乐趣
- 29. C++:多重继承与多态性
- 30. 虚拟继承如何解决“菱形”(多重继承)歧义?
这就是我的想法,因此我的困惑。我同意,将它作为一个“特征”包含在内是错误的,因为它肯定违背了我对OO – johnc 2009-02-10 12:47:00
的理解。“_class汽车不能从它的四个车轮继承(例如继承四次Wheel_的类型”嗯,它可以,只是不直接,有趣的想法;) – curiousguy 2011-11-01 03:06:34