[英]Java polymorphism casting - runtime error ClassCastException
我在這里有此代碼:
public class code {
public static void main(String args[]){
Animal ani1 = new Animal();
Animal ani2 = new Dog();
Dog d1 = (Dog)ani1; //runtime error ClassCastException
Dog d2 = (Dog)ani2;
}
}
class Animal {
public String name = "animal";
public void talk(){
System.out.println("Animal");
}
}
class Dog extends Animal {
public String name = "dog";
public void talk(){
System.out.println("Dog");
}
}
我不理解為什么通常會發生運行時錯誤並向下轉換。 將創建2個對象,一個Animal
對象和一個Dog
對象。 每個變量都由Animal
類型的變量引用。
我認為Java不會為d1
指定Animal
類型的對象,因為d1
被聲明為Dog
類型。 但是令我困惑的是ani1
和ani2
都是Animal
類型,應該可以向下轉換為Dog
嗎? 唯一的區別是一個引用Animal
對象,另一個引用Dog
對象。
Java是否知道ani1
引用了Animal
對象,並且不允許d1
分配引用了Animal
對象的變量?
VGR說的是正確的,您無法更改某些內容。 僅在這里進行轉換才能幫助我們的代碼在編譯過程中識別出它是什么。
考慮ff示例:
Animal ani1 = new Cat();
Animal ani2 = new Dog();
Dog dog1 = (Dog) ani1; // will produce a runtime error
Dog dog2 = (Dog) ani2;
就像給定的示例一樣,您不能僅通過強制轉換就簡單地將Cat
更改為Dog
。 Dog
永遠是Animal
但Animal
不能永遠是Dog
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.