Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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使用相同的方法继承2个接口_Java_Inheritance - Fatal编程技术网

Java使用相同的方法继承2个接口

Java使用相同的方法继承2个接口,java,inheritance,Java,Inheritance,在以下代码段中,第一个代码段不编译,但第二个代码段编译。为什么?有什么区别 一, 二, 允许该类实现多个接口,但是当接口扩展多个接口并且两个父接口都具有相同的命名方法时,它会给出错误,而不是没有任何问题。这是它在IDE中没有显示错误的唯一原因,因为IDE(eclipse)有自己的编译器,并且不使用javac进行编译 在Java 1.4或更早版本中,两个代码段都应该无法编译。在1.5或更高版本中,两个版本都应该编译 如果重写Java1.4中的方法,则必须提供与基类方法完全相同的返回类型 这个限制在

在以下代码段中,第一个代码段不编译,但第二个代码段编译。为什么?有什么区别

一,

二,


允许该类实现多个接口,但是当接口扩展多个接口并且两个父接口都具有相同的命名方法时,它会给出错误,而不是没有任何问题。这是它在IDE中没有显示错误的唯一原因,因为IDE(eclipse)有自己的编译器,并且不使用javac进行编译

在Java 1.4或更早版本中,两个代码段都应该无法编译。在1.5或更高版本中,两个版本都应该编译

如果重写Java1.4中的方法,则必须提供与基类方法完全相同的返回类型

这个限制在Java1.5和更高版本中被取消,这里允许您提供从基类方法的返回类型继承的返回类型

这是有道理的,也是有用的。如果您有:

I1 x = new I12Impl();
那么您只知道x.m()返回一个I1

但是如果你有更多的信息:

I12 x = new I12Impl();
然后您知道x.m()返回一个I12(也是一个I1)


这有时很方便(例如,在调用x.m()时,您可能可以避免沮丧)

看到编译器发出的错误消息了吗?它说什么?类型test.I2和test.I1不兼容;两者都定义了m(),但对于不相关的返回类型,我认为第一个没有错。它应该编译。他们在IDE上编译,而不是在命令行上@拉凯什:是的。我犯了这个错误。。“类型test.I2和test.I1是不兼容的;两者都定义了m(),但是使用不相关的返回类型,静态接口I12扩展了I1,I2{”……但是IDE,它工作得很好……这不是很奇怪吗??“主编译”是什么意思?请解释一下。eclipse有自己的编译器(ecj),根本不使用javac。它进行深层编译(假定您的意思是生成类文件)。Eclipse有自己的编译器,并且遵循自己的语义,它无法检测上述代码的问题。
I1 x = new I12Impl();
I12 x = new I12Impl();