나는이 다음 코드 :
이 Java 코드에 대한 설명은 무엇입니까?
public class Main {
public void method(Object o)
{
System.out.println("Object Version");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
Main question = new Main();
question.method(null);//1
}
}
이 결과가 "문자열 버전"입니다 왜? 첫 번째 메서드가 StringBuffer
개체를 사용하는 경우 왜 컴파일러 오류가 발생합니까?
또 다른 경우 : 첫 번째 메소드가 StringBuffer
객체를 취하고 question.method("word");
이라고 쓰면 결과는 "문자열 버전"이됩니다. 왜 ? 컴파일러 오류가없는 이유는 무엇입니까?
호기심. 나는 컴파일러가 불만을 기대했지만, 아마도 두 개의 인수 클래스 ('String'이 더 구체적 임) 사이에 형식 관계가 있다는 사실이 JLS의 경우 일 수 있습니다. 'StringBuffer' 대/소문자는 분명 모호하기 때문에 쉽습니다. –
@third 질문 : 물론 오류는 발생하지 않을 것입니다. String을 전달하고 있으므로 String 매개 변수가있는 메소드가 분명히 호출됩니다. 컴파일러가 혼란스러워할만한 것은 없습니다. – someguy