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) {
    }
}