java – 当我尝试使用具有相同名称和参数类型的两个方法时,为什么会出现编译错误?

如果我将字节更改为int我得到编译器错误.你能解释一下这个问题吗?

public class A {
   protected int xy(int x) { return 0; }
}

class B extends A {
   protected long xy(int x) { return 0; } //this gives compilor error
   //protected long xy(byte x) { return 0; } // this works fine
}   
最佳答案

If i change the byte to int I get a compiler error.

如果你这样做,你有这个:

public class A {
   protected int xy(int x) { return 0; }
}

class B extends A {
   protected long xy(int x) { return 0; }
}   

…而xy方法的唯一区别是它们的返回类型.方法不能仅通过它们的返回类型来区分,这就是Java的定义方式.考虑一下:

myInstance.xy(1);

应该拨打哪个xy? long xy(int x)或int xy(int x)?

如果您的目标是覆盖B中的xy,那么您需要使其返回类型为int以匹配A#xy.

转载注明原文:java – 当我尝试使用具有相同名称和参数类型的两个方法时,为什么会出现编译错误? - 代码日志