2

次のコードを取ります。

public interface InterfaceA {    }
public interface InterfaceB {    }
public class Abba implements InterfaceA, InterfaceB {    }

public class MainThingy {
    public static void main(String[] args) {
        Abba abObj = new Abba();
        int result = MainThingy.doStuff(abObj);
    }
    private static int doStuff(InterfaceA param) {
        System.out.println("method A");
    }
    private static int doStuff(InterfaceB param) {
        System.out.println("method B");
    }
}

どちらのdoStuff()メソッドもAbba引数を取るため、どちらが呼び出されるかは明確ではありません。JavaコンパイラやJVMはこれをどのように処理しますか?

4

1 に答える 1

4

単純。参照があいまいなため、このコードはコンパイルされません。

$ javac MainThingy.java 
MainThingy.java:4: reference to doStuff is ambiguous, both method doStuff(InterfaceA) in MainThingy and method doStuff(InterfaceB) in MainThingy match
        MainThingy.doStuff(abObj);
                  ^
1 error
于 2012-05-10T03:59:43.877 に答える