Java 変数の型変換のサンプル(基本型と参照型)

Java 変数の型変換のサンプルです。

Javaの変数の型(データ型)には基本型と参照型があります。
Java 変数のデータ型とラッパークラス

目次

基本型の数値型の変換

基本型の数値型の変換についてです。

範囲が大きい型への代入

範囲が小さい型から大きい型の変数への代入は、
暗黙的に型変換が行われるのでそのまま代入できます。

7行目は、int型(4バイト)の変数をlong型(8バイト)の変数に代入しています。

package test1;
public class Test1 {
	public static void main(String[] args) {
		
		int a = 100;
		
		long b = a;		
	}
}

範囲が小さい型への代入

範囲が大きい型から小さい型の変数への代入はキャストを行います。
キャストは、かっこ( )が必要です。

7行目は、long型(8バイト)の変数をint型(4バイト)の変数にキャストして代入しています。

package test1;
public class Test1 {
	public static void main(String[] args) {
		
		long a = 100;
		
		int b = (int)a;		
	}
}

 

参照型の変換

参照型の変換についてです。
型同士がクラスの継承またはインターフェースの実装の関係である必要があります。

親クラスの型への代入

親クラスの型の変数への代入は、暗黙的に型変換が行われるのでそのまま代入できます。
子クラスは親クラスのすべてのメンバーを保証できるためです。

7行目のクラスは3行目のクラスを継承しています。
16行目は、親クラスの型の変数にそのまま代入しています。
18行目は、親クラス型の変数で子クラスのメソッドを実行しようとしていますがエラーになります。変数の型で実行できるメソッドが制限されています。
→継承でメソッド名が同じオーバーライドの場合は、インスタンスの型のほうで実行されます。Java オーバーライドのサンプル

package test1;

class TestA {
	void printA() {	}
}

class TestB extends TestA {
	void printB() {	}
}

public class Test1 {
	public static void main(String[] args) {
 
		TestB tb = new TestB();
		
		TestA ta =  tb;
		ta.printA();
//		ta.printB(); //コンパイルエラー
	}
}

子クラスの型への代入

子クラスの型の変数への代入は、明示的にダウンキャストを行う必要があります。
親クラスは子クラスのすべてのメンバーを保証できないためです。

7行目のクラスは3行目のクラスを継承しています。
16行目は、子クラスの型の変数に明示的にダウンキャストを行って代入しています。ダウンキャストしない場合コンパイルエラーになります。キャストは、(型名)とします。

package test1;

class TestA {
	void printA() {	}
}

class TestB extends TestA {
	void printB() {	}
}

public class Test1 {
	public static void main(String[] args) {
 				
		TestA ta =  new TestB();
		
		TestB tb =  (TestB)ta;
		tb.printA();
		tb.printB(); 
	}
}

インターフェースの型への代入

インターフェースの型の変数への代入は、暗黙的に型変換が行われるのでそのまま代入できます。
インターフェースを実装しているクラスはインターフェースのすべてのメンバーを保証できるためです。

7行目のクラスは3行目のインターフェースを実装しています。
17行目は、インターフェース型の変数にそのまま代入しています。
19行目は、インターフェース型の変数でクラスのメソッドを実行しようとしていますがエラーになります。変数の型で実行できるメソッドが制限されています。

package test1;

interface InterfaceA  {
	void printA();
}

class TestB implements InterfaceA  {
	public void printA() {	}
	public void printB() {	}
}

public class Test1 {
	public static void main(String[] args) {
 				
		TestB tb =  new TestB();
		
		InterfaceA ia =  tb;
		ia.printA();
//		ia.printB(); //コンパイルエラー
	}
}

関連の記事

Java 変数のデータ型とラッパークラス
Java クラスの変数のサンプル(メンバー変数/ローカル変数)
Java staticメソッドとstatic変数のサンプル



△上に戻る