以前ClassCastExceptionとコンパイルエラーの違いについて質問させて頂きました。
どういう場合にコンパイルエラーが出るのかがわかりましたが、ClassCastExceptionについてのみ少し疑問が残ったので質問させて頂きます。
java
1public class Data { 2 public static void main(String[] args){ 3 A a = new A(); 4 C c = new C(); 5 c = (C) a; //ClassCastException 6 } 7} 8 9class A { 10 public void sample() { 11 System.out.println("A"); 12 } 13} 14 15class B extends A { 16 public void sample() { 17 System.out.println("B"); 18 } 19} 20 21class C extends A { 22 public void sample() { 23 System.out.println("C"); 24 } 25}
このコードで何故ClassCastExceptionが発生するのかがわかりません。
A型とC型には継承関係があり、ダウンキャストすれば正しくキャスト出来た扱いになるのではないでしょうか?
ClassCastExceptionは
「あるオブジェクトを継承関係にないサブクラスにキャストしようとしたことを示すためにスローされます。」
とありましたが、スーパークラスをサブクラスにキャストすることは出来ないということでしょうか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。