Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何限制多重继承?_Java_Multiple Inheritance - Fatal编程技术网

Java如何限制多重继承?

Java如何限制多重继承?,java,multiple-inheritance,Java,Multiple Inheritance,在阅读Java中的多重继承或菱形问题时,我意识到它不受支持。但我想知道Java实际上是如何限制多重继承的? 是否有任何类可以检查程序员是否在extends关键字后传递了多个类名,或者以其他方式检测此功能? 我读了几篇文章,但除了一个常见的答案:classname继承了多个类之外,没有任何关于Java如何防止多重继承的建议。如果您试图扩展多个类,编译器实际上会抱怨,并声明错误:'{'预期的。如果您对JDK的哪一部分实际执行此操作感兴趣,我建议您查看javac解析器的源代码 作为旁注,Java不允许

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

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


我读了几篇文章,但除了一个常见的答案:classname继承了多个类之外,没有任何关于Java如何防止多重继承的建议。

如果您试图扩展多个类,编译器实际上会抱怨,并声明
错误:'{'预期的
。如果您对JDK的哪一部分实际执行此操作感兴趣,我建议您查看
javac
解析器的源代码

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

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

语法级别不允许这样做。类声明的语法允许在
extends
关键字后有一个类名。并且
implements
列表中的名称必须是接口名而不是类名。请参阅JLS的。编译器将检查这两个方面。尝试声明多个sup的Java源代码er类不会编译

在实现级别,“.class”的格式文件只允许将一个类列为
super_类
;请参阅JVM规范中的
ClassFile
结构。接口中的标识符都必须引用接口。JVM规范中指定的各种类文件约束由JVM的本机类加载器强制执行



如果您想了解这些限制是如何实施的,您可以下载一个OpenJDK源代码树并亲自阅读代码(但我不认为这有什么意义。您真正需要知道的是,这些限制是严格实施的,没有切实可行的方法来绕过这一实施)

当您在
扩展后编写超过一个类时。难道不是这样吗?在
扩展后超过一个类名是一个编译时错误。如果您不能编译一个程序,您就不能运行它。这就是Java阻止多重继承的原因。@user3437460对此不是很确定。正在阅读理论读物.