Ris*_*sad -1 java multiple-inheritance
在阅读有关Java中的多重继承或钻石问题时,我意识到它不受支持。但是我想知道Java实际上如何限制多重继承?
是否有任何类可以检查程序员是否在extends关键字之后传递了一个以上的类名或其他方法来检测此功能?
我读了几篇文章,但没有什么建议暗示Java如何确切地防止多重继承,除了一个常见的错误提示:类名继承了多个类。
但是我想知道Java实际上如何限制多重继承?
在语法级别不允许使用。类声明的语法允许在extends关键字之后使用一个类名。并且implements列表中的名称必须是接口名称,而不是类名称。参见JLS的8.1节类声明。编译器会检查这两种情况。尝试声明多个超类的Java源代码将无法编译。
在实现级别,“。class”文件的格式仅允许将一个类列出为“ super_class;”。请参阅JVM规范的4.1节中的ClassFile结构 。中的标识符必须全部引用接口。JVM规范中指定的各种类文件约束由JVM的本机类加载器强制实施。interfaces
如果要了解如何实施这些限制,可以下载OpenJDK源代码树并自己阅读代码。(不过,我并不明白这一点。您真正需要知道的是,严格执行这些限制,没有切实可行的方法可以解决该限制。)