Java FAQ:参照があいまい
Java FAQ:S011 Q-10
まんま
interface C200804230a {} interface C200804230b {} class C20080423ab implements C200804230a, C200804230b {} public class C2008042300 { void method(C200804230a a) {} void method(C200804230b b) {} void callA() { C20080423ab ab = new C20080423ab(); method(ab); // method(A a)を呼びたい } void callB() { C20080423ab ab = new C20080423ab(); method(ab); // method(B b)を呼びたい } public static void main(String[] args) { } }
で、
C2008042300.java:13: method の参照はあいまいです。C2008042300 の メソッド method(C200804230a) と C2008042300 の メソッド method(C200804230b) が両方適合します。 method(ab); // method(A a)を呼びたい ^ C2008042300.java:18: method の参照はあいまいです。C2008042300 の メソッド method(C200804230a) と C2008042300 の メソッド method(C200804230b) が両方適合します。 method(ab); // method(B b)を呼びたい ^ エラー 2 個
キャストで解決
interface C200804230a {} interface C200804230b {} class C20080423ab implements C200804230a, C200804230b {} public class C2008042310 { void method(C200804230a a) {} void method(C200804230b b) {} void callA() { C20080423ab ab = new C20080423ab(); method((C200804230a)ab); // method(A a)を呼びたい } void callB() { C20080423ab ab = new C20080423ab(); method((C200804230b)ab); // method(B b)を呼びたい } public static void main(String[] args) { } }