2013-09-27 16 views
7

ÇIKIŞ olduğunda geçersiz kılınan yönteme boş geçme: Byöntem arasındaki fark parametre alt tip

Neden sanal makine çağrısı bu yöntem f(null){System.out.println("B");} yapar? 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

Lütfen biçimlendirmenizi gözden geçirin ... temiz değil – kTiwari

+0

göründüğümüzden emin olmamız gerekiyor ... – vikingsteve

cevap

6

en belirli parametre türüyle yöntemi denir değil Neden

. Birden fazla üye yöntemi erişilebilir ve yöntem çağırma için geçerli hem ise kural Thats çalışma zamanı yöntemi sevk için tanımlayıcı sağlamak üzere birini seçmek için gereklidir, JLS section 15.12.2.5

değil. Java programlama dili, en spesifik yöntemin seçildiği kuralı kullanır.