Java如何限制多重继承?

时间:2018-04-08 04:58:19

标签: java multiple-inheritance

在阅读Java中的多重继承或钻石问题时,我意识到它不受支持。但我想知道Java如何实际限制多重继承?

是否有任何类可以检查程序员是否在extends关键字之后传递了多个类名或其他方法来检测此功能?

我阅读了一些文章,但没有任何关于Java如何防止多重继承的建议,除了它抛出错误的一个常见答案:classname继承了多个类。

2 个答案:

答案 0 :(得分:3)

  

但我想知道Java如何实际限制多重继承?

在语法级别禁止使用它。类声明的语法允许extends关键字后面的一个类名。 implements列表中的名称必须是接口名称而不是类名称。请参阅JLS的Section 8.1 Class Declarations。编译器会检查这两件事。尝试声明多个超类的Java源代码将无法编译。

在实施层面," .class"的格式file只允许将一个类列为super_class;请参阅JVM规范的Section 4.1中的ClassFile结构。 interfaces中的标识符都必须引用接口。 JVM规范中指定的各种类文件约束由JVM的本机类加载器强制实施。

如果您想查看如何强制执行这些限制,您可以下载OpenJDK源代码树并自行阅读代码。 (我不明白这一点。你真正需要知道的是,这些限制是严格执行的,没有切实可行的办法来解决这个问题。)

答案 1 :(得分:2)

如果您尝试扩展多个类,编译器实际上会抱怨,并声明error: '{' expected。如果您对JDK的哪些部分真正感兴趣,我建议您查看OpenJDK sources。可以找到javac解析器的源代码here

作为旁注,Java不允许多重继承状态,这就是你所指的。但是,您仍然可以通过实现多个接口来实现多重行为继承。