Javaでいうところのキャストとはデータ型を変換することだ。特に明示的に変換するときキャストと呼ぶことが多い。
このページではJavaでのキャスト方法についてサンプルプログラム付きでまとめている。
目次
Javaのキャスト方法
ある型から別な型に変換することをJavaでは「型変換」と言う。
型変換には、暗黙的に変換させる方法と、明示的に変換させる方法の2種類があり、後者をキャストと言う。
基本的な使い方
明示的に型変換を行う場合、キャスト演算子を使う。
キャスト演算子は、変換元変数の前に「(変換したい型)」を書くだけだ。
代入する変数 = (キャスト演算子)変換元の変数
これだけだ。非常に簡単だろう。
データ型による違い
キャストには、基本型とクラス型の2種類がある。
基本型
例 |
① long var1 = 1; ② short var2 = (short)1; |
説明 |
基本型で表現できる範囲は、byte、short、int、long、float、doubleの順に広くなる。
① byte の変数や数値を、intの変数に代入する場合など、範囲を拡大するケースでは、暗黙の型変換が行われるため、キャストは不要である。
② 逆に、int の変数や値を、byte の変数に代入する場合など、範囲を縮小するケースでは、キャストが必要となる。 |
クラス型
例 |
① Object obj1 = new Integer(1); ② Integer obj2 = (Integer)obj1; |
説明 |
クラス型で表現できる範囲は、サブクラス、スーパークラスの順、または、インタフェース実装クラス、インタフェースの順に限定的になる。
① サブクラスの変数をスーパークラスの変数に代入するなど、範囲が限定的になる場合は、暗黙の型変換が行われるため、キャスト不要である。
② 逆に、スーパークラスの変数をサブクラスの変数に代入するなど、範囲が拡大する場合は、キャストが必要となる。 |
Javaでキャストするサンプルプログラム
それでは実際にサンプルプログラムを確認してみよう。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
class Animal { String kind; } interface PetInterface { public void setNickName(String owner); public String getNickName (); } class Pet extends Animal implements PetInterface { public String nickName; public void setNickName (String nickName){ this. nickName = nickName; } public String getNickName (){ return this. nickName; } } class CastSample { public static void main(String[] args) { double var1 = 100; // [A-1] float var2 = (float)var1; // [A-2] float var3 = 1.0f / 2.0f; // [A-3] int var4 = (int)var3; // [A-4] System.out.println("[A-5]var1 : " + var1); System.out.println("[A-6]var2 : " + var2); System.out.println("[A-7]var3 : " + var3); System.out.println("[A-8]var4 : " + var4); Pet myDog = new Pet(); // [B-1] myDog.kind = "dog"; myDog.setNickName ("Jimmy"); PetInterface myPet = myDog; // [B-2] Animal myAnimal = myDog; // [B-3] Pet myDog1 = (Pet)myPet; // [B-4] Pet myDog2 = (Pet)myAnimal; //[B-5] System.out.println("[B-6]myAnimal.kind : " + myAnimal.kind); System.out.println("[B-7]myDog1.getNickName(): " + myDog1.getNickName()); System.out.println("[B-8]myDog2.kind : " + myDog2.kind); } } |
実行結果
1 2 3 4 5 6 7 |
[A-5]var1 : 100.0 [A-6]var2 : 100.0 [A-7]var3 : 0.5 [A-8]var4 : 0 [B-6]myAnimal.kind : dog [B-7]myDog1.getNickName(): Jimmy [B-8]myDog2.kind : dog |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [A-1] double var1に、暗黙の型変換により、long型の値「100」を設定する。
- [A-2] float var2に、var3 をfloat型に変換した値を設定する。
- [A-3] float var3に、(float)1 ÷ (float)2の演算結果を設定する。
- [A-4] int var4に、var3をint型に変換した値を設定する。
- [A-5] var1の値を表示する。
- [A-6] var2の値を表示する。
- [A-7] var3の値を表示する。
- [A-8] var4の値を表示する。
- [B-1] Dog myDogに、Dogクラスのインスタンスを設定する。
- [B-2] PetInterface myPetに、暗黙の型変換により、myDogをPetInterfaceに変換して設定する。
- [B-3] Animal myAnimalに、暗黙の型変換により、myDogをAnimalに変換して設定する。
- [B-4] Pet myDog1に、myPetをDog型に変換した値を設定する。
- [B-5] Pet myDog2に、myAnimalをDog型に変換した値を設定する。
- [B-6] Animal myAnimalのkindを表示する。
- [B-7] Pet myDog1のnicknameを取得し表示する。
- [B-8] Pet myDog2のkindを表示する。
まとめ
このページでは、Javaのキャストについてまとめてみた。
クラスのキャストについては、もともとは別々な型を、キャストを利用することで、あたかも同じ型に見せかけて、プログラミングを柔軟に拡張するといったこともできる。
Javaを実践的に使用することになると、かなりの頻度で登場することになるので、ぜひ覚えよう。