私は宿題のためにこの声明を出されました。
哺乳類のペット = 新しい犬 ();
サモエド = ペット。
次のような図が与えられました。
動物 ---> 脊椎動物 ---> 哺乳類 ---> 犬 ---> ハスキー、サモエド、ビーグル
私の理解では、コードは有効ではなく、キャストできません。Mammal は Dog オブジェクトを指し、Samoyed 型は Dog または Mammal には含まれません。
あれは正しいですか?
Samoyed s = pet;
ペットは哺乳類であり、哺乳類は必ずしもサモエドではないため、コンパイル時にエラーが発生します。しかし、明示的にキャストすると
Samoyed s = (Samoyed)pet;
コンパイルエラーは発生しません。それでも、pet の実際のクラスは Dog であり、Dog は Samoyed のサブクラスではないため、この行は実行時に ClassCastException をスローします。
Dog
type として宣言された変数にのインスタンスを割り当てようとしているため、これは有効なキャストではありませんSamoyed
。あなたの仮定は正しいです。