2013-09-27 3 views
7

OUTPUT: BPassing null auf die überschriebene Methode, wenn die Differenz zwischen den Methoden ist der Parameter Subtyp

Warum virtuelle Maschine Aufruf dieser Methode f(null){System.out.println("B");}?

Warum nicht 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

Bitte überprüfen Sie Ihre Formatierung ... es ist nicht klar – kTiwari

+0

scheint, müssen wir die Spezifikation wieder ausgraben ... – vikingsteve

Antwort

6

Die Methode mit spezifischste Parameter Typ genannt. Das ist die Regel Dies ist von JLS section 15.12.2.5

Wenn mehr als ein Mitglied Verfahren zugänglich und anwendbar auf einen Methodenaufruf ist, ist es notwendig, ein zu wählen, den Deskriptor für den Laufzeit-Methode Versand zur Verfügung zu stellen. Die Java-Programmiersprache verwendet die Regel, dass die spezifischste Methode gewählt wird.

Verwandte Themen