- 621 名前:仕様書無しさん [04/12/07 03:12:43]
- シルバー本のP108の型変換の問題が分からないので、どなたか
教えてください。 ■以下のプログラムをコンパイルし、実行しようとすると どうなりますか?正しいものを選びなさい。 1: class Super{} 2: class Sub extends Super{ 3: void meth(){ System.out.println("meth"); } 4: } 5: 6: class Sample6_4_1{ 7: public static void main(String[] args){ 8: Super[] sps = { new Sub(), new Sub(), new Sub()}; 9: Sub[] sbs = (Sub[])sps; 10: for(int i = 0; i < sbs.length; i++){ 11: if(sbs[i] instanceof Sub) 12: sbs[i].meth(); 13: } 14: } 15: } A 9行目でコンパイルエラー B 11行目でコンパイルエラー C コンパイルできるが実行時に例外がスローされる。 D コンパイルでき、実行すると、methが3回出力される。 答えはC。 【解説】 spsの要素のオブジェクトの型はSubだが、sps自身の型はSuper[]である。 したがって、9行目のキャストでコンパイルは可能になるが、実行時 にはここで例外が発生する。 私はDだと思ったのですが、なぜCなのでしょうか?? お願いします!
|

|