SORU
1 ŞUBAT 2011, Salı


alt sınıf süper sınıf açık çevrim

public class Animal {
    public void eat() {}
}

public class Dog extends Animal {
    public void eat() {}

    public void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = (Dog) animal;
    }
}

Atama Dog dog = (Dog) animal; derleme bir hata oluşturmaz, ama zamanında ClassCastException oluşturur. Neden derleyici bu hatayı tespit edebilir mi?

CEVAP
1 ŞUBAT 2011, Salı


Bir döküm kullanarak aslında derleyici "güven bana söylüyorsun. Ben profesyonelim, ben ne yaptığımı biliyorum Ve bildiğim halde yapamazsın garantisi söylüyorum ki bu animal değişken kesinlikle olacak bir köpek."

Çünkü hayvan değil aslında bir köpek (hayvan, yapabilirsin Animal animal = new Dog(); ne olurdu bir köpek) VM bir istisna atar at çalışma zamanı çünkü ... ihlal eden güven (söyledin derleyici her şey olur Tamam değil!)

Derleyici biraz daha akıllı körü körüne her şeyi kabul etme, eğer sen denemek ve döküm nesneleri farklı inheritence hiyerarşileri (dökme bir Köpek için bir Dize için örnek) sonra derleyici atar geri seni çünkü bilir ki Asla yarayacak.

Çünkü sen aslında sadece durdurma derleyici şikayet eden, her zaman oyuncular için önemli kontrol etmeyeceksin neden bir ClassCastException kullanarak instanceof bir if ifadesi (ya da bir şey bu yönde.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Nesson

    Charles Ness

    27 NİSAN 2006
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • TechBalance

    TechBalance

    12 HAZİRAN 2011