私はJavaSe7 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に対してあいまいです」です。最初の方法をコメントアウトすると、2番目の方法でも同じエラーが発生します。
私の考えは次のとおりです。最初の方法は開封とボクシングが必要です。2番目の方法は開開と拡大が必要です。3番目の方法は開封とボクシングのみが必要です。したがって、必要な変換が最も少なく、すべてがボクシング変換であるため、3番目の方法である必要があります。