![]() |
||
Basic Member
加入日期: Dec 2001
文章: 13
|
引用:
不知道有沒有理解錯問題? 如果在產生SubObject時就依照條件產生不同的SubObject,如: Object detials = (Object) Result.info; Object inst = null; if (detials.mType.equals("GGININ")&& detials.mSubType.equals("Der")) { inst = new SubObject(); } else if(detials.mType.equals("B")&& detials.mSubType.equals("B")) { inst = new SubObject1(); } else if(detials.mType.equals("C")&& detials.mSubType.equals("C")) { inst = new SubObject2(); } ..... 然後直接呼叫getCurrentValue(), 因為多型就會直接呼叫到對應的SubObject的getCurrentValue() |
||||||||
![]() |
![]() |
*停權中*
加入日期: Dec 2010
文章: 341
|
引用:
是的 我目前是這樣理解 這樣寫的 原來這叫做多型阿 謝謝 |
|||
![]() |
![]() |
*停權中*
加入日期: Sep 2010
文章: 691
|
引用:
LR2001 高人已點出答案, 你參考一下, 我現在是邊啃code邊偷瞄pcdvd回覆, 實在沒時間看你的 抱歉了.... |
|
![]() |
![]() |
Golden Member
![]() ![]() ![]() ![]() 加入日期: Feb 2004 您的住址: 從來處來
文章: 2,762
|
引用:
OOP = object-oriented programming, 物件導向程式。 既然都用 Java 了,應該花一點時間研究 OOP, 這是 C#, Java 這類語言的精髓。一般 Java/C# 的書,應該都會寫到。 OOP 三大絕:封裝、繼承、多型。其實觀念清楚了,這些都是易如反掌的事。 Java 多型範例: http://pydoing.blogspot.tw/2010/11/...lymorphism.html |
|
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Jun 2010
文章: 333
|
樓主的 code 是 java, 對吧
我看到一些關鍵字 我想你是要寫 android app , 對吧 java 很神奇的 從以前寫 C/C++ 的經驗 , 總之 java 是一個神奇的東西 不能隨便轉型, 不像以前用 C/C++, 一個 point 搞定 我對 java 也不熟 不可把 C/C++ 的經驗 套用在 java , 尤其是轉型 ... |
![]() |
![]() |
Major Member
![]() 加入日期: Sep 2002
文章: 155
|
看起來單純是個多型的問題
我想只要在base class先定義好abstract method 再到derived class去寫出相對應的方法 在使用的時候只要呼叫bass class的method即可 例如定義一個class character 在裡面 有一個abstract attack metohd 然後有warrior 跟 wizard extend character 然後再去分別實作 attack方法 最後 character player01 = new warrior; character player02 = new wizard; player01.attack(),player02.attack() 就會做出warrior 跟wizard的attack |
![]() |
![]() |
Amateur Member
![]() 加入日期: Jun 2002 您的住址: 太陽系
文章: 32
|
你的問題寫成這樣子會比較好吧?
代碼:
public class MyInfo { private String info = "myInfo"; private MySubObj[] subObjs = new MySubObj[5]; public MyInfo() { subObjs[0] = new MySubObj2(); subObjs[1] = new MySubObj2(); subObjs[2] = new MySubObj1(); subObjs[3] = new MySubObj2(); subObjs[4] = new MySubObj1(); } public String getInfo() { return info; } public String getSubInfo() { String result = ""; for(MySubObj so : subObjs) { result += so.getSubValue(); } return result; } } public abstract class MySubObj { private String value = "mySubObj"; public String getValue() { return value; } public abstract String getSubValue(); } public class MySubObj1 extends MySubObj { private String subValue1 = "mySubObj1"; public String getSubValue() { return subValue1; } } public class MySubObj2 extends MySubObj { private String subValue2 = "mySubObj2"; public String getSubValue() { return subValue2; } }
__________________
PCDVD站長:擋廣吿的後果就是導致免費網站無以為繼! 在你享受自由網路的同時 自私的行為只會扼殺這個環境。 |
![]() |
![]() |
*停權中*
加入日期: Sep 2010
文章: 691
|
引用:
我早期剛學程式的時候是用類似這做法, 後來則改用 interface , 然後用 reflect 去抓 instance 的 class type(因為以前一些東西,需要用到一些動態 load/create instance 機制), 沒有誰優誰差, 這是個人比較偏好的寫法, 盡量少用 一堆繼承, 個人經驗供參考. 此文章於 2014-12-05 03:08 PM 被 T磨人 編輯. |
|
![]() |
![]() |