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

  • Dive In

    Dive In

    17 Temmuz 2013
  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012