アップキャスト【upcasting】
概要

あるデータ型の変数を別の型に変換する操作を型変換(キャスト)と呼ぶ。オブジェクト指向言語では、クラスから生成されたインスタンスについても同様の変換が可能であり、継承関係にあるクラス間で上下いずれかの方向へのキャストを行うことができる。
サブクラスはスーパークラスの属性やメソッドをすべて継承しているため、サブクラスのインスタンスは必ずスーパークラスの仕様を満たしている。この性質から、アップキャストは型安全な変換とみなされ、Javaなど多くの言語では明示的なキャスト演算子を記述しなくても自動的に処理される。変換によってオブジェクト自体が変化するわけではなく、変数や参照がスーパークラスの型として扱われるようになるだけである。
アップキャスト後のインスタンスでは、スーパークラスで定義されたメンバーのみが利用可能となり、サブクラス固有のメソッドや属性には直接アクセスできなくなる。ただし、サブクラスがスーパークラスのメソッドをオーバーライドしている場合、実行時にはサブクラスの実装が呼び出される。これは「ポリモーフィズム」(多態性)の仕組みによるものであり、例えば、異なるサブクラスのインスタンスをスーパークラス型の配列にまとめ、共通のメソッドを一括して呼び出すといった用途で利用される。
逆に、スーパークラス型のインスタンスをサブクラスの型へ変換することを「ダウンキャスト」(downcasting)と呼ぶ。スーパークラスのインスタンスがサブクラスの仕様を満たしている保証はないため、明示的な変換操作が必要となる。実際のオブジェクトの型と変換先の型が一致しない場合は実行時に例外やエラーが発生する。JavaやC#ではinstanceof演算子やis演算子で型を事前に確認してからダウンキャストを行う手法が一般的である。