以下代码已成功编译,其中在某个类中,我编写了两个具有相同名称和相同类型签名的方法。我正在使用Eclipse Oxygen 4.7.0,可以看到红色显示的错误Duplicate method show(int,int)
。但是,当我编译代码时,它会以正确的输出成功编译。当我使用javac
在命令提示符下运行相同的代码时,其有效地不会被编译。
package oops2;
class A6
{
int i, j;
void show(int i, int j)
{
System.out.println(" i & j : " +i + " " +j);
}
void show(int k, int l)
{
System.out.println("override or not");
}
void show(String s)
{
System.out.println("Entered str is "+s);
}
}
public class OverrideNoInherit
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
A6 a = new A6();
a.show(20, 30);
a.show("this is it");
}
}
在这里,我要提到的是,当我在Eclipse上单击run
时,会弹出一个对话框
该项目中存在错误,要继续启动吗?
现在,此错误不是意味着同一项目中还有其他类有错误,因此没有被编译。我不认为这意味着尽管代码中有错误,程序仍会被编译。那么警告和错误之间会有什么区别?
答案 0 :(得分:1)
Eclipse总是编译类。包含错误的方法主体由引发包含该类的编译错误的java.lang.Error
的方法替换。这实际上对测试驱动的开发很有用,它使您可以对具有编译错误的类启动测试。即使当前其他某些部分包含错误,也可以测试可编译的方法。
您在这里有一个特殊情况。编译器能够编译该方法的第一次出现,但后来遇到无法添加到类的重复方法。因为第一个方法已经编译,并且尽管发出警告,但在强制执行类的启动时,却看到常规的方法已经成功地进行了编译。