2013-09-27 9 views
7

WYJŚCIE: BPrzechodząc zerowy do zastąpiona metoda, gdy różnica między metodami jest podtypem parametr

Dlaczego wirtualnego call maszyna ta metoda f(null){System.out.println("B");}?

Dlaczego nie f(null){System.out.println("A");}

public class Test{ 

    public static class A {} 
    public static class B extends A {} 

    public void f(A a) {System.out.println("A");} 
    public void f(B a) {System.out.println("B");} 

    public static void main(String[] args) { 
     new Test().f(null); 
    } 
} 
+0

Proszę przejrzeć formatowanie ... nie jest jasne, – kTiwari

+0

wygląda na to, że musimy ponownie pobrać specyfikację ... – vikingsteve

Odpowiedz

6

Metoda z najbardziej szczegółowych parametrów typu jest tzw. Ów reguły To z JLS section 15.12.2.5

Jeśli więcej niż jedna metoda jest członkiem zarówno dostępne i stosowane do wywołania metoda A, konieczne jest, aby wybrać jedną, aby zapewnić deskryptor dla metody wysyłki run-time. Język programowania Java korzysta z reguły, że wybrana jest najbardziej szczegółowa metoda.

Powiązane problemy