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

标签 java

如果我将 byte 更改为 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);

应该调用哪个xylong xy(int x) 还是 int xy(int x)

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

关于java - 当我尝试使用具有相同名称和参数类型的两个方法时,为什么会出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838019/

相关文章:

java - 在自定义所有存储库中注入(inject) bean

java - 当通过关联链接访问时,为什么实体包含在 Spring Data REST 的内容对象中?

java - 我不断收到错误 : int cannot be dereferenced. 如何修复它?

java - 在 Java 中使用多线程并行化快速排序

java - JPA持久化单元写入文件?

java - 如何级联仅保留新实体

java - 尝试在空对象引用上调用虚拟方法 'boolean com.google.android.finsky.api.model.DfeToc.isGplusSignupEnabled()'

java - 确定任何jar的版本

java - 云平衡Optaplanner : implement an overconstrained planning

java - 为什么我在 Mulesoft 的 Anyponit Studio (Eclipse) 中收到错误 "Obtained an unexpected kind of VM install"?