看板 java 關於我們 聯絡資訊
引述《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
TonyQ:Object的能見度沒有getChar,提供含getChar的介面讓ab實做, 05/09 09:40
choYM:所以foo[0] = a之後,foo[0]是什麼形態? 05/09 09:43
TonyQ:Object皮 , cls_a 骨. 05/09 09:55
choYM:所以沒有辦法變成cls_A的骨和皮喔=..= 好奇怪的比喻 哈 05/09 10:00
superlubu:check instanceof 後 cast 回去 05/09 10:28
jtmh:要變成 cls_A 的皮可以像你說的做 downcast: (cls_a) foo[0] 05/09 10:28
jtmh:不過要多用 if 來 check 是否為該 instance, 比較標準多型的 05/09 10:31
jtmh:的寫法是像一樓講的提供含getChar的介面讓ab實做,然後Object 05/09 10:33
jtmh:改成該介面的名稱。 05/09 10:35
choYM:恩! 謝謝 我會再試試看 05/10 12:58
nullMe:其實可以用 LinkedList 或 HashList 05/11 22:45
TonyQ:用了那兩樣還是不能避開兩種class cast 的問題啊. 05/14 00:40