Java 这个方法模棱两可
我试图理解方法重载,但无法理解以下示例中出现以下代码错误的原因Java 这个方法模棱两可,java,compiler-errors,overloading,Java,Compiler Errors,Overloading,我试图理解方法重载,但无法理解以下示例中出现以下代码错误的原因 public class OverLoading_OverRiding { public static void main(String[] args) { OverLoading_OverRiding o = new OverLoading_OverRiding(); o.sum(5, 5); } void sum(int i, long j) { } voi
public class OverLoading_OverRiding {
public static void main(String[] args) {
OverLoading_OverRiding o = new OverLoading_OverRiding();
o.sum(5, 5);
}
void sum(int i, long j) { }
void sum(long i, int j) { }
}
我得到一个错误:
该类型的方法sum(int,long)不明确
重载\u重写
当我对同一个示例执行显式强制转换时,它会起作用:
o.sum(5, (long)5);
我无法正确理解歧义类型错误的原因
编译器说它不知道调用哪个方法。原因调用不明确。问题是,如果调用
o.sum(5,5),编译器不知道使用哪种方法代码>
他可以使用空和(inti,long j){}
,其中前5个为int,后5个为long
他可以使用void sum(long i,int j){}
其中,他取前5的长度,取第二个5的整数
由于这两种方法在本例中都是有效的,并且编译器总是需要一个有效选项,因此您会收到错误消息,提示您的方法不明确
如果调用o.sum(5,(long)5)
它只匹配方法无效和(inti,long j){}
问题是,为什么要以这种方式重载方法?
重载主要用于以下可选参数:
void myMethod(int i) {}
void myMethod(int i, bool b) {}
void myMethod(int i, string s) {}
所以你可以像这样调用这个方法:
myMethod(42);
myMethod(42, true);
myMethod(42, "myString");
也许这会给你一个方法重载的概念。因为5
可以表示为long
和int
两种方法,编译器在没有更多信息的情况下无法推断要调用哪一种方法,因为它们的方法签名与同一调用兼容
当您将第二个参数强制转换为long
时,编译器可以推断第二个签名可以使用,因为没有其他选项
此外:
这是因为5可以是隐式长或整数。。由于这个原因,方法调用是不明确的 很简单,您必须在方法中传递正确的参数,即
在第一个例子o.sum(5,5l)中,第一个参数是int 5,第二个参数是5l
第二种情况(5l,5)。
这将很好原因如下
案例1:总和(整数a,长b)强>
这里的和(5,5)匹配这个方法
怎么做?
因为第一个参数是int&调用方法也是int。现在下一个参数很长,但我们要传递int。所以呢?它满足加宽转换/隐式类型转换
隐式类型转换示例:
int i=10;
double j;
j=i;
System.out.println(j); // Output j=10.0
同样的事情也发生在这里,
sum(5,5)匹配=>sum(int,long)和sum(long,int)
案例2:总和(长a,整数b)
sum(5.0,5)匹配两种方法是的TobiasR我知道方法重载的概念,但我的问题是理解错误
int i=10;
double j;
j=i;
System.out.println(j); // Output j=10.0