作者choYM (肉羹麵冰沙)
站內java
標題Re: [問題] 陣列可以存不同型態的內容嗎?
時間Sat May 9 09:34:31 2009
引述《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