この質問と、SCJP 1.6 セルフテストの質問に対する回答の説明を理解するのに苦労しています。問題は次のとおりです。
class A { }
class B extends A { }
public class ComingThru {
static String s = "-";
public static void main(String[] args) {
A[] aa = new A[2];
B[] ba = new B[2];
sifter(aa);
sifter(ba);
sifter(7);
System.out.println(s);
}
static void sifter(A[]... a2) { s += "1"; }
static void sifter(B[]... b1) { s += "2"; }
static void sifter(B[] b1) { s += "3"; }
static void sifter(Object o) { s += "4"; }
}
結果は?答えは -434 ですが、本書の説明が気になります。これは、この章の前半で概念が説明された方法とは大きく異なります。
「一般に、オーバーロードされた var-args メソッドは最後に選択されます。配列はオブジェクトであることを思い出してください。最後に、int を Integer にボックス化し、オブジェクトに「拡張」できます。」
それを分割して、誰かがその説明をさらに定義してもらえますか?
- 一般に、オーバーロードされた var-args メソッドは最後に選択されます。
- 配列はオブジェクトです (私は実際にそれを理解していますが、なぜそれがこの質問に関連しているのでしょうか)。
- int は Integer にボックス化してから Object に「拡張」できます。
ありがとう!