• ベストアンサー

参照型クラスキャストで実行時エラーにならないパターン

class SUPER{} class SUB extends SUPER{} 上記のような関係がある場合に、以下の記述をするとコンパイルは通るが実行時エラーになる可能性がある。ということですが、実行時エラーにならない場合が想像できません。 ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。 SUB v_sub = (SUB)new SUPER();

質問者が選んだベストアンサー

  • ベストアンサー
  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.2

ちょっと想定と違うかもしれないけど、例えば、 SUB v_sub = new SUB();      //(1)SUB型の変数にSUBのインスタンス SUPER v_super = v_sub;      //(2)それをSUPER型の変数に代入 SUB v_sub2 = (SUB)v_super;    //(3)SUPER型の変数をSUBにキャストして代入 要するに、もともとSUBのインスタンスだったもの(1)を SUPERに代入した場合(2)、見かけの型はSUPERです(v_superのこと)。 しかし実体(インスタンス)はSUBなので、(3)のように、 「SUPERをSUBにキャスト」してもエラーにはなりません。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kotecho
  • ベストアンサー率66% (6/9)
回答No.1

その例ですと必ずキャストエラーになります。 > SUB v_sub = (SUB)new SUPER(); エラーにならない可能性について、 以下の様なケースが想定されていたのではないでしょうか。 SUB v_sub = (SUB) createSUPER(); ---- SUPER createSUPER() { return new SUB(); }

すると、全ての回答が全文表示されます。

関連するQ&A