2012-12-04 35 views
10

BenPolimorfizm ve Statik Yöntemler

public Car { 
    public static void m1(){ 
     System.out.println("a"); 
    } 
    public void m2(){ 
     System.out.println("b"); 
    } 
} 

class Mini extends Car { 
    public static void m1() { 
     System.out.println("c"); 
    } 
    public void m2(){ 
     System.out.println("d"); 
    } 
    public static void main(String args[]) { 
     Car c = new Mini(); 
     c.m1(); 
     c.m2();  
    } 
} 

O polimorfizmi Yalnızca örnek yöntemlerine, statik yöntemlerle çalışmıyor biliyorum burada bu kodu ile ilgili bir sorum var. Ayrıca, bu geçersiz kılma statik yöntemler için işe yaramıyor. c, d

c m1 yöntemini çağıran Çünkü, ancak geçersiz kılamaz yüzden, statik ve o sınıf Mini'nin yerine Car yöntemini çağırır:

Bu yüzden bu program çıktısını gerektiğini düşünüyorum.

Bu doğru mu?

Ancak, benim ders kitabı cevap olması gerektiğini söylüyor: a, d

bir yazım hatası nedir? Çünkü şu an biraz kafam karıştı.

Lütfen bunu temizleyin, teşekkürler.

cevap

26

c, m1 yöntemini çağırır, ancak statiktir, bu nedenle geçersiz kılmaz ve yöntem, Araç yerine Mini sınıfındaki yöntemi çağırır.

Tam olarak geriye doğru.

cCar tarafından tanımlanan yöntemleri arayacak c üzerinden yapılanCar olarak, bu nedenle statik yöntem çağrıları ilan olduğunu.
Derleyici, c'un aslında bir Mini tuttuğunu bilmeden c.m1()'u doğrudan Car.m1()'a derler.

Bu nedenle, örneğin bunun gibi statik yöntemleri hiçbir zaman aramamalısınız.

+4

+1 For * Bu nedenle, örnek olarak hiçbir zaman statik yöntemleri çağırmamalısınız. * – Joffrey

İlgili konular