【问题标题】:Is possible to support multiple inheritance through virtual?是否可以通过 virtual 支持多重继承?
【发布时间】:2013-11-15 07:23:49
【问题描述】:

我知道 Java 没有任何支持多重继承的能力。举个例子,C类继承了A类和B类的所有属性,那么编译器就会混淆应该调用A和B中定义的哪个方法。所以,C++支持多重继承,而Java不支持。

我知道通过使用接口可以在Java中实现这种多重继承。

我的疑问是,Diamond 问题是什么?如何在 Java 中解决?

例如,考虑多个类,例如 A、B、C、D。B 类和 C 类继承了 A 类的属性,D 类继承了 B 类和 C 类的属性。这称为“钻石问题”。

我们如何在 Java 中解决这个 Diamond 问题?这个 Diamond 问题什么时候可能在编码中准确出现?

我还提到在 C++ 中使用 Virtual 可以实现这种多重继承的概念。而且,Java 的构建和设计都是为了简单!

虚拟在 C++ 中的实际含义是什么?如何在 Java 中使用?是否可以通过Virtual实现多重继承?

我是 Java 初学者,对于这样的问题非常抱歉。但是,我相信这可以从我的错误中吸取教训!

【问题讨论】:

  • 不能使用接口实现多重继承。您永远不能从两个不相关的其他类继承实现。
  • @DavidWallace 好吧,你永远无法通过扩展两个类来获得 C++ 风格的多重继承。您所能做的就是实现多个接口。 Java 中没有“钻石”情况 =)

标签: java c++ inheritance


【解决方案1】:

Java 中没有多重继承的概念。实现多个接口是可能的,但这不是多重继承。

因为没有多重继承,所以在 确实 具有多重继承的语言中出现的“钻石问题”在 Java 中不会出现。所以 Java 中没有 virtual 关键字 - 不需要它。

Java 的设计者认为多重继承实际上有用的情况非常少,因此不值得将其包含在语言中。在大约 15 年的 Java 编程中,我只一次遇到过 C++ 风格的多重继承在其中有用的业务问题。所以我很高兴地说他们是对的。

【讨论】:

  • 是的,Java 中不需要 Virtual 的背后还有其他原因吗?我需要了解虚拟的概念。而且,如果类实现了多个接口,我们将使用什么来调用,所以它不应该是多重继承吗?如果我有任何错误,请原谅。作为刚向您学习的 Java 初学者!
  • 好的,但是“虚拟”是一个 C++ 概念,而不是 Java 概念。 Java 根本没有多重继承。问如何使用“虚拟”就像问如何清洁自行车上的化油器。
  • 如果需要,我很乐意进一步澄清,Meena。当我在编写 C++ 时,我一直在纠结于“虚拟”的确切含义。
  • 是的,我以后肯定会怀疑。你比我有经验,所以我绝对可以问你.. 我应该在哪里问我的疑问?在同一个问题中? @大卫华莱士
  • 如果他们与这个问题直接相关,当然,在这个问题上添加评论。如果您想引起我的注意,请确保您 ping 我 - 只需将 @ 放在我的名字前面。如果它与这个问题无关,请发布一个新问题 - 我可能会看到它,如果我没有,那么同样知识渊博的人肯定会看到。不要因为你认为自己是初学者而害羞。每个人都曾经是初学者。
【解决方案2】:

如果你想要多个'继承',你需要实现多个interfaces。每个接口都声明了实现类需要为其提供定义的抽象方法。

public class MyClass implements interface1, interface2, interface3{
  // provide a definition to the abstract methods of interface
}  

C++ 中的“钻石”问题是当一个类继承自两个类时,这两个类都具有来自共同祖父母的方法。在 Java 中,不存在菱形问题,因为您可以永远扩展两个类;只有一个类和许多接口。

你组合的问题太多了。我建议您将帖子分成单独的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多