ダウンキャスト【downcasting】
概要

オブジェクト指向言語では、子クラスのインスタンスを親クラス型の変数に代入できる。例えば「動物」クラスを継承した「犬」クラスがある場合、「犬」型のインスタンスを「動物」型の変数として扱うことが可能である。この状態では動物クラスで定義された機能しか利用できないが、「犬」型へダウンキャストすると、犬クラス固有のメソッドや属性にアクセスできるようになる。
これとは逆に、子クラス型を親クラス型に変換する操作は「アップキャスト」(upcasting)と呼ばれる。アップキャストは安全性が保証されているため暗黙的に処理されることが多い。一方、ダウンキャストは変換先の型が実際のオブジェクトの型と一致しない可能性があるため、明示的な記述と型確認を求められることが多い。
ダウンキャストが失敗するのは、変換先の型と実際のインスタンスの型が一致しない場合である。例えば、「動物」型の変数が「猫」のインスタンスを指しているとき、それを「犬」型へ変換しようとすると実行時にエラー(例外)が発生する。これを防ぐため、多くの言語ではダウンキャストの前にインスタンスの実際の型を確認する手段が用意されている。Javaのinstanceof演算子、C#のis演算子やas演算子がこれに当たる。
ダウンキャストは、ポリモーフィズム(多態性)を活用するプログラムで用いられることがある。様々な子クラスのインスタンスを共通の親クラス型として一括管理し、特定のインスタンスが持つ固有の機能にアクセスする際に、元の具体的な型へ戻すためにダウンキャストが行われる。過度に使用すると設計上の問題が生じる場合もあり、親クラスのインタフェースだけで処理できる場面では型変換を行わないほうが保守性を維持しやすい。
(2026.6.1更新)