我想了解Java的多態性,並且我有一個關於向下轉換對象的問題。 比方說,在這個例子中,我有兩個子類狗和貓,從一個超類動物如何向下轉換Java對象?
繼承我的理解,向下轉型目標的唯一途徑是,如果這個對象已經是不錯的類型,像這樣:
Animal a = new Dog();
Dog d = (Dog) a;
此作品正確嗎?
但是如果我想創造一個普通的動物而不知道它會是什麼,然後在我知道時施放它,我該怎麼做?
Animal a = new Animal();
Dog d = (Dog) a;
這會在運行時引發ClassCastException嗎?
我發現做到這一點的唯一方法是創建從一個普通的動物造成狗新狗的構造函數:
Animal a = new Animal();
Dog d = new Dog(a);
與
public Class Dog extends Animal{
public Dog(Animal a){
super(a);
}
}
所以我的問題是,怎麼了我應該這樣做?
- 我是不是最好的方法?
- 我不應該這樣做,如果我必須這樣做意味着我的程序設計得不好?
- 我錯過了更好的方法嗎?
非常感謝! nbarraille