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
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.)
ruby süper sınıf başka bir yöntem arıy...
() süper yükseltir "eğer data: tü...
Nasıl Python (süper) temel sınıf başla...
Nasıl açık Java edebilirim .okunabilir...
Bir sınıf ad fonksiyonları karşı stati...