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なのでしょうか??
お願いします!