是这样的:我在看到第六章 类文件结构时,看到“super_class (父类索引)”这个字段,书上说“由于 Java 语言不允许多继承,所以父类索引只有一个”。我联想到 JVM 是语言无关的,所以我当时觉得 JVM 应该会支持多个父类索引吧。然后我去查了 Java SE 8 的 JVM 规范,里面说 super_class 这个索引指向一个“ CONSTANT_Class_info”结构,然后我看这个结构是代表一个类或者接口( The CONSTANT_Class_info structure is used to represent a class or an interface )。那么这样是不是可以认为 JVM 在“super_class"这一字段上不支持多继承?然而我们又知道 C++是可以跑在 JVM 上的? But how ?
我对 C++和 Java 都不熟,只提供一些想法。 可以编译的时候把多个父类组合成一个类,然后直接继承这个组合后的类。 比如 A 继承 B 和 C 两个,把 B 和 C 的代码组合成 D,然后 A 直接继承 D。 或者根本不用在 class 文件里标明继承关系,不用和 java 一样一个 class 文件表示一个类, 直接把整个程序编译成一个 class 文件就行,中间进行什么组合拼接都可以,只要程序执行的效果一样的就行了。 所有程序都是要最终的执行结果,中间有什么变化都没什么关系。 就像是打开一个网页的时候,也只会关心打开快不快,只要用起来一样,不管后面是 Java 还是 php,都不影响。