前提・実現したいこと
現在JavaSilverの勉強をしています。
参照型の型変換・ダウンキャストについて教えてください。
発生している問題・エラーメッセージ
下記のコードの中の b = (BB)a; は、なぜコンパイルが成功するのでしょうか? 変数aは、中身はCC型のオブジェクトでありますが、あくまでAA型の変数ですので、 AA型(スーパークラス)をBB型(サブクラス)にダウンキャストできていることに 違和感を感じます。 もし、 b = (CC)a; なら、コンパイルが成功するのは分かります。 しかし、中身の型と異なる型へのダウンキャストが、 なぜコンパイル成功するのかが理解できずにおります。 参考書やネットでどんなに調べてもどうしても理解ができません。 勉強をはじめて日が浅いため、基礎的な理解不足でしたら申し訳ございません。 ご指導ご鞭撻のほどよろしくお願い致します。
該当のソースコード
Java
1interface AA { 2 public void test(); 3} 4class BB implements AA { 5 public void test(){ 6 System.out.println("BB test"); 7 } 8} 9class CC extends BB { 10 public void test(){ 11 System.out.println("CC test"); 12 } 13} 14class Main { 15 public static void main(String[] args){ 16 BB b; 17 AA a = new CC(); 18 b = (BB)a; 19 b.test(); 20 } 21}
注
mainメソッドを記載し忘れていることが分かりましたので、追記いたしました。2020/4/10 0:26
失礼いたしました。ご指摘いただいた方、ありがとうございます。
回答3件
あなたの回答
tips
プレビュー