Re: [問題] 陣列可以存不同型態的內容嗎?

看板java作者 (肉羹麵冰沙)時間15年前 (2009/05/09 09:34), 編輯推噓6(606)
留言12則, 5人參與, 最新討論串2/3 (看更多)
引述《choYM (肉羹麵冰沙)》之銘言: 會想問這個問題是因為要用多型沒錯,指示好像還是有點問題.. class cls_A { public char ch_o; public void getChar() { return ch_o; } } class cls_B { public char ch_X; public void getChar() { return ch_X; } } 以下是main: Object[] foo = new Object[2]; cls_A a = new cls_A('o'); // 宣告一個cls_A物件a cls_B b = new cls_B('X'); // 宣告一個cls_B物件b for (int i=0; i<2; i++) foo[i] = new Object(); // 初始化. foo[0] = a; foo[1] = b; for (int i=0; i<2; i++) // 印出字元 System.out.println(foo[i].getChar()); 會有錯誤.. 我翻書找過好像是downcasting的問題(我不確定), 請問有什麼方法可以解決還是要改進的嗎? 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.133.12.208

05/09 09:40, , 1F
Object的能見度沒有getChar,提供含getChar的介面讓ab實做,
05/09 09:40, 1F

05/09 09:43, , 2F
所以foo[0] = a之後,foo[0]是什麼形態?
05/09 09:43, 2F

05/09 09:55, , 3F
Object皮 , cls_a 骨.
05/09 09:55, 3F

05/09 10:00, , 4F
所以沒有辦法變成cls_A的骨和皮喔=..= 好奇怪的比喻 哈
05/09 10:00, 4F

05/09 10:28, , 5F
check instanceof 後 cast 回去
05/09 10:28, 5F

05/09 10:28, , 6F
要變成 cls_A 的皮可以像你說的做 downcast: (cls_a) foo[0]
05/09 10:28, 6F

05/09 10:31, , 7F
不過要多用 if 來 check 是否為該 instance, 比較標準多型的
05/09 10:31, 7F

05/09 10:33, , 8F
的寫法是像一樓講的提供含getChar的介面讓ab實做,然後Object
05/09 10:33, 8F

05/09 10:35, , 9F
改成該介面的名稱。
05/09 10:35, 9F

05/10 12:58, , 10F
恩! 謝謝 我會再試試看
05/10 12:58, 10F

05/11 22:45, , 11F
其實可以用 LinkedList 或 HashList
05/11 22:45, 11F

05/14 00:40, , 12F
用了那兩樣還是不能避開兩種class cast 的問題啊.
05/14 00:40, 12F
文章代碼(AID): #1A1DsgP5 (java)
文章代碼(AID): #1A1DsgP5 (java)