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

  • Amena

    Amena

    15 Kasım 2006
  • Flash CS6 Video Tutorials for Beginners (Actionscript 3 Gaming)

    Flash CS6 Vi

    14 EYLÜL 2012
  • LiteralMSPaint

    LiteralMSPai

    27 EKİM 2010