Java如何限制多重继承?

Ris*_*sad -1 java multiple-inheritance

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

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

我读了几篇文章,但没有什么建议暗示Java如何确切地防止多重继承,除了一个常见的错误提示:类名继承了多个类。

Ste*_*n C 5

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

在语法级别不允许使用。类声明的语法允许在extends关键字之后使用一个类名。并且implements列表中的名称必须是接口名称,而不是类名称。参见JLS的8.1节类声明。编译器会检查这两种情况。尝试声明多个超类的Java源代码将无法编译。

在实现级别,“。class”文件的格式仅允许将一个类列出为“ super_class;”。请参阅JVM规范的4.1节中ClassFile结构 。中的标识符必须全部引用接口。JVM规范中指定的各种类文件约束由JVM的本机类加载器强制实施。interfaces


如果要了解如何实施这些限制,可以下载OpenJDK源代码树并自己阅读代码。(不过,我并不明白这一点。您真正需要知道的是,严格执行这些限制,没有切实可行的方法可以解决该限制。)