2012-05-10 3 views
2

다음 코드를 보자Java - 호환되는 인수로 메소드를 재정의하는 방법은 무엇입니까?

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() 메소드 때문에 아바 인수를 것, 하나가 호출 될 명확하지 않다. Java 컴파일러 및/또는 JVM이이를 어떻게 처리합니까?

+7

이미 코드가 있으므로 * 시도 할 때 어떤 일이 발생 했습니까? 그 정보를 가지고 그것을 게시물 (제목과 본문)에 통합 할뿐만 아니라 그것을 사용하여 주제에 대한 검색을 구체화하십시오 ... –

+0

죄송합니다, 잘못된 용어로 검색하고 있었다고 생각합니다. 또한, 당신은 절대적으로 옳았습니다. 나는 그것을 컴파일하려고 노력해야했습니다. 내가 그것을 쓰는 동안 그것이 왜 나에게 일어나지 않았는지 나는 모른다. – Riking

답변

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 
+1

'doStuff'가'int'를 반환하지 않기 때문에 컴파일되지 않습니다. –

+0

파트 2) JVM이 과부하를 결정/선택하는 데 어떤 역할을 수행합니까? –

+0

자바 언어 스펙은 모든 오버로드 동작을 자세하게 설명합니다. JVM이이를 구현합니다. – Asaph

관련 문제