2013-09-27 1 views
7

USCITA: Bpassando null al metodo override quando la differenza tra metodi è il parametro sottotipo

Perché chiamata macchina virtuale questo metodo f(null){System.out.println("B");}?

Perché non 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

si prega di rivedere la formattazione ... non chiaro – kTiwari

+0

sembra che abbiamo bisogno di scavare di nuovo le specifiche ... – vikingsteve

risposta

6

Il metodo con più specifico parametro tipo è chiamato. Quello è la regola Questo è da JLS section 15.12.2.5

Se più di un metodo membro è accessibile e applicabile ad una chiamata di metodo, è necessario scegliere uno di fornire il descrittore per il metodo di spedizione in fase di esecuzione. Il linguaggio di programmazione Java utilizza la regola per scegliere il metodo più specifico.