JVM decyduje, która metoda jest przeładowana w czasie kompilacji. Mam jeden przykład:W jaki sposób JVM znajduje metodę (parametr o najbliższym dopasowaniu) do wywołania w przypadku przeciążenia funkcji
public class MainClass{
public static void go(Long n) {System.out.println("takes Long ");}
public static void go(Short n) {System.out.println("takes Short ");}
public static void go(int n) {System.out.println("takes int ");}
public static void main(String [] args) {
short y = 6;
long z = 7;
go(y);
go(z);
go((Short)y);
}
}
Według mojego rozeznania, należy wydrukować następujące:
takes Short
takes Long
takes Short
... ale rzeczywisty wynik jest:
takes int
takes Long
takes Short
Jednak jeśli mam następujące trzy funkcje:
public static void go(Integer n) {System.out.println("takes Integer");}
public static void go(Long n) {System.out.println("takes Long ");}
public static void go(Short n) {System.out.println("takes Short ");}
... i nazwać go za pomocą:
int a= 10; and go(i); //output : takes Integer.
... dlaczego tam jest jakaś różnica dla short
i int
?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.4 – kosa
Możliwy duplikat http://stackoverflow.com/ q/6268157/2087187 – EProgrammerNotFound