Java FAQ:継承関係のある引数のオーバーロードでどれが呼ばれるか?
Java FAQ:S011 Q-09
まんま
public class C2008042200 { static void foo(Object arg) { System.out.println("foo(Object arg)"); } static void foo(String arg) { System.out.println("foo(String arg)"); } public static void main(String[] args) { foo(null); } }
で、
foo(String arg)
「継承関係のないクラス同士の場合は「参照はあいまいです」とコンパイルエラーになります」の意味が分からない…。
こういう↓ことか?(S011 Q-10 が、まさにそれ?)
public class C2008042230 { static void foo(Object arg) { System.out.println("foo(Object arg)"); } static void foo(String arg) { System.out.println("foo(String arg)"); } static void foo(StringBuffer arg) { System.out.println("foo(StringBuffer arg)"); } public static void main(String[] args) { foo(null); } }
で、
C2008042230.java:16: foo の参照はあいまいです。C2008042230 の メソッド foo(java.lang.String) と C2008042230 の メソッド foo(java.lang.StringBuffer) が両方適合します。 foo(null); ^ エラー 1 個