2014-05-19 2 views
4

이 코드를 실행할 때 출력은 "String"입니다. String 매개 변수를 받아들이고 코드를 다시 실행하는 메서드를 숨기면 출력이 "개체"이므로 아무도이 코드의 작동 방식을 설명해 줄 수 있습니까?java의 메서드 매개 변수에 null 참조를 전달합니까?

public class Example { 

    static void method(Object obj) { 
     System.out.println("Object"); 
    } 

    static void method(String str) { 
     System.out.println("String"); 
    } 

    public static void main(String args[]) { 
     method(null); 
    } 
} 
+0

[JonSkeet] (http://stackoverflow.com/users/22656/jon-skeet)이 질문에 좋은 답변을했습니다. (http://stackoverflow.com/a/1545512/1828937) –

답변

8

컴파일러는 가장 구체적인 메서드를 선택합니다.이 경우 String은 Object의 하위 클래스이므로 String을 인수로 사용하는 메서드가 호출됩니다. JLS 15.12.2.5

하나 개 이상의 멤버 메소드가 메소드 호출에 접근 가능하고 적용 할 수있는 두 경우에서

, 런타임 방법 파견에 대한 설명을 제공하기 위해 하나를 선택하는 것이 필요하다. Java 프로그래밍 언어는 가장 구체적인 방법이 선택되는 규칙을 사용합니다.

비공식적 인 직관은 보다 구체적입니다. 첫 번째 방법으로 처리 한 호출이 모두 이 컴파일 타임 형식 오류없이 전달 될 수있는 경우입니다.

관련 문제