JavaA2Z

KAB-studio > プログラミング > JavaA2Z > アップキャストとは

アップキャスト

日本語 upcast
英語 上キャスト
ふりがな あっぷきゃすと
フリガナ アップキャスト

解説

あるクラススーパークラスへとキャストすること。
キャストの一種。と言っても、アップキャストは必ず「暗黙的キャスト」が可能なため、明示的キャストする必要はない。
 
アップキャストでは「何も変化しない」という点が重要である。アップキャストする際、渡される参照の値や、その参照が指し示すインスタンスは全く変化しない。変わるのは、参照を格納する、参照変数だけである。
この機能はポリモーフィズムのために存在する。格納する参照変数クラスが持つメソッド呼び出した場合、インスタンスクラスオーバーライドされていれば、そのオーバーライドしたメソッドが呼び出される。アップキャストが暗黙的に可能なのは、ポリモーフィズムを実現するための言語仕様と考えた方がよい。
これに対し、サブクラスへとキャストすることを「ダウンキャスト」と呼ぶ。不用意なアップキャストは不必要なダウンキャストを強いられることもあり、バグが発生する可能性がある。本当にアップキャストが必要なのか、ポリモーフィズムの観点からも考慮した方が良いだろう。
 
ちなみに「up」なのは、クラス継承関係において「スーパークラス」が「サブクラス」の「上」にあるためである。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // Integerクラスを作ります。
        Integer integer = new Integer( 100 );
        System.out.println( integer );
        // 100

        // スーパークラスにあたるObjectクラスに
        // 「アップキャスト」します。特に何もせずに
        // 自動的にアップキャストされます。
        Object object = integer;
        System.out.println( object );
        // 100

        // 重要なのは、たとえアップキャストしても、
        // 参照型の型、つまり「入れ物」としての型が
        // 変わっただけで、格納されている参照の値や、
        // その参照が指し示すインスタンスは全く変化
        // しないという点です。これによりポリモーフィズムが
        // 実現されます。
        System.out.println( object.hashCode() );
        // 100
        // 見た目はObject#hashCode()メソッドを呼んでいますが、
        // 実際に呼ばれているのはIntegerhashCode()メソッドです。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // Integerクラスを作ります。
        Integer integer = new Integer( 100 );
        System.out.println( integer );
        // 100

        // スーパークラスにあたるObjectクラスに
        // 「アップキャスト」します。特に何もせずに
        // 自動的にアップキャストされます。
        Object object = integer;
        System.out.println( object );
        // 100

        // 重要なのは、たとえアップキャストしても、
        // 参照型の型、つまり「入れ物」としての型が
        // 変わっただけで、格納されている参照の値や、
        // その参照が指し示すインスタンスは全く変化
        // しないという点です。これによりポリモーフィズムが
        // 実現されます。
        System.out.println( object.hashCode() );
        // 100
        // 見た目はObject#hashCode()メソッドを呼んでいますが、
        // 実際に呼ばれているのはIntegerhashCode()メソッドです。
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/05/04
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。