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

  • Bucky Roberts

    Bucky Robert

    9 HAZİRAN 2011
  • Doc Adams

    Doc Adams

    20 HAZİRAN 2007
  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011