PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
eio
Basic Member
 

加入日期: Dec 2001
文章: 13
引用:
作者公不
.....
因為

我是這樣產生SubObject

Object detials = (Object) Result.info;
Object inst = null;
if (detials.mType.equals("GGININ")&&
detials.mSubType.equals("Der")) {
inst = new SubObject();
}
....

不知道有沒有理解錯問題?
如果在產生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()
     
      
舊 2014-12-05, 11:20 AM #11
回應時引用此文章
eio離線中  
公不
*停權中*
 

加入日期: Dec 2010
文章: 341
引用:
作者eio
不知道有沒有理解錯問題?
如果在產生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()

是的

我目前是這樣理解

這樣寫的

原來這叫做多型阿

謝謝
 
舊 2014-12-05, 11:36 AM #12
回應時引用此文章
公不離線中  
T磨人
*停權中*
 

加入日期: Sep 2010
文章: 691
引用:
作者公不
請問您的意思是這樣嗎 ?

OOP ?

interface 和 reflect 是 ?

我理解的意思是這樣

以下是我的code

PS. 是Java 的

https://gist.github.com/anonymous/5646bb920506cf9d8e19


LR2001 高人已點出答案, 你參考一下, 我現在是邊啃code邊偷瞄pcdvd回覆, 實在沒時間看你的 抱歉了....
舊 2014-12-05, 11:40 AM #13
回應時引用此文章
T磨人離線中  
Adsmt
Golden Member
 
Adsmt的大頭照
 

加入日期: Feb 2004
您的住址: 從來處來
文章: 2,762
引用:
作者公不
請問您的意思是這樣嗎 ?
OOP ?
interface 和 reflect 是 ?
我理解的意思是這樣
以下是我的code
PS. 是Java 的
https://gist.github.com/anonymous/5646bb920506cf9d8e19

OOP = object-oriented programming, 物件導向程式。

既然都用 Java 了,應該花一點時間研究 OOP, 這是 C#, Java 這類語言的精髓。一般 Java/C# 的書,應該都會寫到。

OOP 三大絕:封裝、繼承、多型。其實觀念清楚了,這些都是易如反掌的事。

Java 多型範例:
http://pydoing.blogspot.tw/2010/11/...lymorphism.html
舊 2014-12-05, 01:01 PM #14
回應時引用此文章
Adsmt離線中  
kenchen_1226
Advance Member
 

加入日期: Jun 2010
文章: 333
樓主的 code 是 java, 對吧
我看到一些關鍵字
我想你是要寫 android app , 對吧
java 很神奇的
從以前寫 C/C++ 的經驗 ,
總之 java 是一個神奇的東西
不能隨便轉型,
不像以前用 C/C++,
一個 point 搞定
我對 java 也不熟
不可把 C/C++ 的經驗 套用在 java , 尤其是轉型 ...
舊 2014-12-05, 01:12 PM #15
回應時引用此文章
kenchen_1226離線中  
stalin
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
舊 2014-12-05, 01:41 PM #16
回應時引用此文章
stalin離線中  
傳說
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站長:擋廣吿的後果就是導致免費網站無以為繼!
在你享受自由網路的同時
自私的行為只會扼殺這個環境。
舊 2014-12-05, 02:56 PM #17
回應時引用此文章
傳說離線中  
T磨人
*停權中*
 

加入日期: Sep 2010
文章: 691
引用:
作者傳說
你的問題寫成這樣子會比較好吧?


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 My...


我早期剛學程式的時候是用類似這做法, 後來則改用 interface , 然後用 reflect 去抓 instance 的 class type(因為以前一些東西,需要用到一些動態 load/create instance 機制), 沒有誰優誰差, 這是個人比較偏好的寫法, 盡量少用 一堆繼承,
個人經驗供參考.

此文章於 2014-12-05 03:08 PM 被 T磨人 編輯.
舊 2014-12-05, 03:07 PM #18
回應時引用此文章
T磨人離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是11:07 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。