<質問内容>
以下のソースを実行したとき、実行時エラーとなる。理由はクラスAとBに互換性がないのにダウンキャストをしているから。
AとBは継承関係にあるので、互換性はあるのでは、と思ったのですが、
このソースの場合、どうなっているから”互換性がない”状態で、逆にどうなっていれば”互換性がある”といえるのでしょうか。
Java
1class A { 2 void hello() { 3 System.out.println("A"); 4 } 5} 6 7class B extends A { 8 void hello() { 9 System.out.println("B"); 10 } 11} 12 13public class Main { 14 public static void main(String[] args) { 15 A a = new A(); 16 B b = (B)a; 17 b.hello(); 18 }
ご回答よろしくお願いいたします。
継承しただけの全く別のオブジェクトだから という理由では納得できませんか?「互換性」とは何をどこまで求めているのでしょう。
分かりにくい質問ですみませんでした。
「互換性」という意味でいうと、例えば上記クラス間がどうなっていれば互換性が”ある”と言えるのか、またどうなっているから互換性がないといえるのか、その境界線がわからず…
なので質問をさせていただいた次第です。
もうちょっと質問の意図が正しく伝わるように質問調整してください。
何が問題なのか課題なのかはっきりしないのはよろしくないです。アドバイスの確度が定まらないとアドバイスしようがないので(ゴールが見えない)
B は A を拡張したもので A ではないので、A を B として扱うことはできません。
ダウンキャストというのは次のようにします。
A a = new B(); // アップキャスト
B b = (B)a; // ダウンキャスト
回答1件
あなたの回答
tips
プレビュー