実現したいこと
Java
1public interface A {} 2public abstract class B implements A {} 3public class C extends B {} 4public class D extends C {} 5public class Main { 6 public static void main(String[] args) { 7 A[] array = new D[]{ (D) new C(), null, new D() }; 8 } 9}
現在JavaSilverの黒本の学習を進めており、第5章配列の操作の10問目で理解につまずいています。
解説で7行目1の(D) new C()は、CクラスをDクラスに変換できないためClassCastExceptionがスローされると書かれておりますが、実行時エラー(ClassCastExceptionが)が発生する理由についてお伺いしたいです。
私は、メモリ上にサブクラスDのインスタンスが生成されていない状態でスーパークラスCからサブクラスにキャストを行うと継承関係にあるためコンパイルエラーは発生しないが、メモリ上で参照先のサブクラスのインスタンス領域がないため実行時エラーが発生すると考えていますが、この認識であっていますでしょうか?
