Javaのポリモーフィズムを理解しようとしていますが、オブジェクトのダウンキャストについて1つ質問があります。この例では、スーパークラスの動物から継承する2つのサブクラスDogとCatがあるとします。
私が理解したことから、オブジェクトをダウンキャストする唯一の方法は、このオブジェクトがすでに次のように適切なタイプであるかどうかです。
Animal a = new Dog();
Dog d = (Dog) a;
これは正しく機能しますか?
しかし、それが何であるかを知らずに通常の動物を作成し、それを知ったときにそれをキャストしたい場合はどうすればよいですか?
Animal a = new Animal();
Dog d = (Dog) a;
これにより、実行時にClassCastExceptionがスローされますか?
私がそれを行うために見つけた唯一の方法は、通常の動物から犬を作成する新しいDogコンストラクターを作成することです。
Animal a = new Animal();
Dog d = new Dog(a);
と
public Class Dog extends Animal{
public Dog(Animal a){
super(a);
}
}
だから私の質問は、これをどのように行うべきかということです。
- 私はそれを最善の方法でやっていますか?
- 私はこれをまったく行うべきではありません、もし私がそうしなければならないのなら、私のプログラムはよく考えられていないということですか?
- 私が逃したより良い方法はありますか?
どうもありがとう!nbarraille