2013-10-17 4 views
0

Java가 첫 번째 대신 두 번째 오버로드를 선택하는 이유는 누구에게 설명 할 수 있습니까? 내가 인수로 1을 통과 할 때 Java가 다른 것보다이 과부하를 선택하는 이유

public static void foo (int a, double b, double...c) {} 
public static void foo (double...a) {} 
public static void bar() 
{ 
    // this is the second 
    foo(1); 
} 

나는 intdouble보다 더 구체적이기 때문에, 자바는 첫 번째 인수를 포착 한 것이라고 생각?

감사합니다.

+0

아뇨, 인수가 없습니다. –

+1

Ok '1'이'int'에 전달되면, 두 번째 인수 인'double' 타입으로 들어가는 것은 무엇입니까? –

답변

5

두 번째 방법은 일치시킬 수있는 유일한 방법입니다. 당신은 1 개의 논쟁만을 가지고 있습니다. 첫 번째 foo은 두 개 이상 필요합니다 (intdouble). 일치하지 않아야합니다.

둘째 숫자 foo은 임의의 숫자가 일치 할 수 있기 때문에 일치합니다. Java는 사용자의 int1double으로 내재적으로 승격시켜 메소드 호출 변환과 일치시킬 수 있습니다.