1
0

More than 1 year has passed since last update.

Java Silver番外編(キャストのコンパイルエラーと実行時例外)

Posted at

Java Silverを学習中、クラスのキャストについて学んだことがあったので復習も兼ねて投稿します。

■クラスのキャストによるエラー

クラスをキャストする際には、コンパイルエラーをする場合と実行時エラーとなる場合がある。

public class A {}

public class B extends A {}

public class C extends A {}

public class Main {
	public static void main(String[] args) {
	
	// 実行時エラーのパターン
 	A a1 = new A();
 	B b1 = (B)a1;
 	
 	// コンパイルエラーのパターン
 	B b2 = new B();
  	C c = (C)b2;
  	
	}
}

■解説

結論:可能性があるなら実行時エラー、全く関係ないならコンパイルエラー

AとBの関係

AとBの場合、両者にはスーパークラスとサブクラスという関係があるので、キャストが成功する可能性もある。
以下のような場合はコンパイルも実行も成功する。

public class A {}

public class B extends A {}

public class Main {
	public static void main(String[] args) {
	
 	A a1 = new B();  // ポリモーフィズムによる生成であれば、このキャストは成功する。
 	B b1 = (B)a1;
 	
	}
}

失敗のケースでは、A型でAインスタンスを代入している。
AはBを継承しているわけではないので、A型のインスタンスを参照に持っているa1を、Bにキャストすることはできない。

BとCの関係

BとC間には継承関係等の関係は全くない。全く関係のない型をキャストすると、コンパイルエラーになる。

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0