【发布时间】:2013-03-19 06:57:35
【问题描述】:
我正在研究 Java Se 7 OCA,但无法弄清楚为什么下面的代码无法编译。 main 方法中的 aMethod 调用给出了编译错误,说明方法不明确。在这个重载方法示例中,加宽和装箱之间的优先规则似乎发生冲突。
public class Overloading {
public static void main(String[] args) {
Byte i = 5;
byte k = 5;
aMethod(i, k);
}
static void aMethod(byte i, Byte k) {
System.out.println("Inside 1");
}
static void aMethod(byte i, int k) {
System.out.println("Inside 2");
}
static void aMethod(Byte i, Byte k) {
System.out.println("Inside 3 ");
}
}
错误是“方法 aMethod(byte, Byte) 对于类型 Overloading 不明确”。 当我注释掉第一种方法时,第二种方法会出现同样的错误。
我的想法是: 第一种方法需要拆箱和装箱 第二种方法需要拆箱和加宽 第三种方法只需要拳击。 所以它必须是第三种方法,因为它需要的转换最少,而且都是拳击转换。
【问题讨论】:
-
错误信息是?
-
为什么你认为这个应该编译?
-
您可以在这里找到问题的正确解释:stackoverflow.com/a/4921807/1065197。由于编译器将进入第 3 阶段,它会发现不止一个合适的方法来使用,因此是模棱两可的。
标签: java overloading scjp