OO 编程中的一个典型问题是菱形问题。我有两个子类 B 和 C 的父类 A。A 有一个抽象方法,B 和 C 实现它。现在我有一个子类 D,它继承了 B和C。菱形问题现在是,D 应该使用什么实现,B 的一个还是 C 的一个?
人们声称 Java 不知道钻石问题。我只能对接口进行多重继承,因为它们没有实现,所以我没有钻石问题。这是真的吗?我不这么认为。见下文:
[移除车辆示例]
钻石问题是否总是导致糟糕的类设计以及程序员和编译器都不需要解决的问题,因为它本来就不应该存在?
更新:也许我的例子选择不当。
看到这张图片
(来源:suffolk.edu)
当然,您可以在 C++ 中将 Person 设为虚拟,因此内存中只有一个 person 实例,但恕我直言,真正的问题仍然存在。您将如何为 GradTeachingFellow 实施 getDepartment()?考虑一下,他可能是一个部门的学生并在另一个部门任教。因此,您可以返回一个部门或另一个部门;这个问题没有完美的解决方案,而且没有实现可能被继承(例如,学生和教师都可以是接口)这一事实似乎并不能解决我的问题。