2016-04-10 32 views
0

Klasse1 Soyut bir sınıf ve bir foo() yöntemine sahiptir. Klasse2, Klasse1'u genişletir ve doo() yöntemine sahiptir, ancak foo() yönteminin üzerine yazmayın.Özet, genişletme ve örnek oluşturma sorunu oluşturma

Tester sınıfında neden doo() yöntemini arayamıyorum? Derleme zamanında

Klasse1.java

public abstract class Klasse1 { 
    public void foo() { 
     System.out.println("Klasse1"); 
    } 
} 

Klasse2.java

public class Klasse2 extends Klasse1 { 
    public void doo() { 
     System.out.println("Klasse2"); 
    } 
} 

Tester.java

public class Tester { 
    public static void main(String[] args) { 
     Klasse1 k; 
     k = new Klasse2(); 
     k.foo(); 
     k.doo(); // doesn't work 
    } 
} 
+2

Klasse1' troo' – Rehman

+1

@Rehman 'doo doesnt' Çünkü yapabilirsin/ – schwobaseggl

+0

Sen Klasse1, o zaman öyleyse, yalnızca ne Klasse1 biliyorsanız referans türüne sahip 'dır()' –

cevap

2

Java derleyicisi örnek türü yerine başvuru türünü denetler. Bu durumda, referans tip

doo() sahip does not Klasse1 olup. Bu yüzden bir hata atacaktır. bu doğal böylece

1

Klasse1 doo yöntemi yoktur.

K

Klasse1 ilan tüm yöntemleri çağırabilir,

((Klasse2)k).doo(); 
0

K bir sınıfın Klasse2 amacı ancak Klasse1 olarak başvurulan geçerli:

Sen Klasse2 o döküm ve sonra böyle kullanabiliriz ve bu sınıfa döküm halinde Klasse2 ilan tüm yöntemleri çağırabilir.

Örnek:

public class Tester { 
    public static void main(String[] args) { 
     Klasse1 k; 
     k = new Klasse2(); 
     k.foo(); 
     ((Klasse2)k).doo(); // now works 
    } 
} 
+0

Teşekkürler! Bu benim problemimi çözdü! –

İlgili konular