あいまいなオーバーロードの解決はコンパイル時に行われる
フヒヒヒヒすいません! Java使いはじめて4年経つけど、ずーっと勘違いしていた。
あいまいなオーバーロードの解決は、実行時ではなくコンパイル時に行われる。
こんなのがあったら
public class OverloadTest { public static void test(Object o) { System.out.println("Object: " + o); } public static void test(String s) { System.out.println("String: " + s); } }
これの出力は
Object o = "テスト"; OverloadTest.test(o); String s = "テスト"; OverloadTest.test(s);
こうなる:
Object: テスト
String: テスト
こうじゃない:
String: テスト
String: テスト
中身がnullの時も、引数の参照の型でどっち呼ぶか決まる。
Object o = null; OverloadTest.test(o); String s = null; OverloadTest.test(s);
Object: null
String: null