🍎

[Java]キャスト とは(備忘録)

2025/02/16に公開

1.はじめに

・データ型を変換することを、キャストといいます。
・小さなデータ型から大きなデータへの変換(例:short 型をlong 型に変換)は、自動で行われます。(暗黙的キャスト)
・大きなデータ型から小さなデータ型への変換(例:long 型をshort 型に変換)は、キャストを使って明示的に行います。(明示的キャスト)

2.アップキャスト とは

・アップキャストとは、継承関係のあるクラスにおいて、サブクラス(継承先)のオブジェクトをスーパークラス(継承元)のオブジェクトと同じように扱うことができます。
アップキャストは、自動で行われます。

3.ダウンキャスト とは

・ダウンキャストとは、継承関係のあるクラスにおいて、スーパークラス(継承元)からサブクラス(継承先)への変換を指します。
ダウンキャストは、自動で行われないのでキャストを行う必要があります。

4.サンプルプログラム

〇例1:暗黙的キャスト/明示的キャスト

Sample_1.java
public class Sample_1 {
    public static void main(String[] args) {
        byte b_1 = 100;
        short s_2 = 10000;

        // 暗黙的キャスト
        short s_1 = b_1;
        System.out.println(b_1);

        // 明示的キャスト
        byte b_2 = (byte)s_2;
        System.out.println(b_2);
    }
}
実行結果
100
16

〇例2:アップキャスト

Sample_2.java
// スーパークラス
class Animal {
    void category() {
        System.out.println("動物の分類について説明");
    }
}

// サブクラス
class Crocodile extends Animal {
    void category() {
        System.out.println("ワニは爬虫類");
    }
}

public class Sample_2 {
    public static void main(String[] args) {
        // インスタンス作成:Crocodile型のオブジェクト作成
        Crocodile crocodile_info = new Crocodile(); 
        // アップキャスト:Crocodile型からAnimal型へ変換
        Animal result = crocodile_info;

        // アップキャスト後のメソッド呼び出し
        result.category();
    }
}
実行結果
ワニは爬虫類

〇例3:ダウンキャスト

  • その1
Sample_3.java
// スーパークラス
class Animal {
    void category() {
        System.out.println("動物の分類について説明");
    }
}

// サブクラス
class Crocodile extends Animal {
    void category() {
        System.out.println("ワニは爬虫類");
    }
}

public class Sample_3 {
    public static void main(String[] args) {
        // インスタンス作成:Crocodile型のオブジェクト作成
        Crocodile crocodile_info = new Crocodile(); 
        // アップキャスト:Crocodile型からAnimal型へ変換
        Animal result = crocodile_info;

        // 変数resultが、Crocodileのインスタンスかどうかチェック
        if (result instanceof Crocodile) {
            // ダウンキャスト
            Crocodile modify_result = (Crocodile) result;
            // ダウンキャスト後のメソッド呼び出し
            modify_result.category(); 
        } else {
            System.out.println("ダウンキャスト失敗");
        }
    }
}
実行結果
ワニは爬虫類
  • その2
Sample_4.java
// スーパークラス
class Animal {
    void category() {
        System.out.println("動物の分類について説明");
    }
}

// サブクラス
class Crocodile extends Animal {
    void category() {
        System.out.println("ワニは爬虫類");
    }
}

class Tiger extends Animal {
    void category() {
        System.out.println("トラは哺乳類");
    }
}

public class Sample_4 {
    public static void main(String[] args) {
        // インスタンス作成:Crocodile型のオブジェクト作成
        Crocodile crocodile_info = new Crocodile(); 
        // アップキャスト:Crocodile型からAnimal型へ変換
        Animal result = crocodile_info;

        // 変数resultが、Crocodileのインスタンスかどうか再チェック
        if (result instanceof Crocodile) {
            //ダウンキャストキャスト
            Tiger modify_result = (Tiger) result;
            // ダウンキャスト後のメソッド呼び出し
            modify_result.category(); 
        } else {
            System.out.println("ダウンキャスト失敗");
        }
    }
}
実行結果
Exception in thread "main" java.lang.ClassCastException: class Crocodile cannot be cast to class Tiger (Crocodile and Tiger are in unnamed module of loader 'app')
	at Sample_4.main(Sample_4.java:31)

5.参考

型キャスト
Javaのアップキャストとダウンキャストについて現役エンジニアが解説【初心者向け】

6.その他

実行環境

Discussion