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 回答