PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   [程式設計問題???] 不同的SubObject該如何自動正確轉換?Mutil-Thread怎麼用 (https://www.pcdvd.com.tw/showthread.php?t=1065147)

eio 2014-12-05 11:20 AM

引用:
作者公不
.....
因為

我是這樣產生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:36 AM

引用:
作者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()

是的

我目前是這樣理解

這樣寫的

原來這叫做多型阿

謝謝

T磨人 2014-12-05 11:40 AM

引用:
作者公不
請問您的意思是這樣嗎 ?

OOP ?

interface 和 reflect 是 ?

我理解的意思是這樣

以下是我的code

PS. 是Java 的

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


LR2001 高人已點出答案, 你參考一下, 我現在是邊啃code邊偷瞄pcdvd回覆, 實在沒時間看你的 抱歉了....

Adsmt 2014-12-05 01:01 PM

引用:
作者公不
請問您的意思是這樣嗎 ?
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

kenchen_1226 2014-12-05 01:12 PM

樓主的 code 是 java, 對吧
我看到一些關鍵字
我想你是要寫 android app , 對吧
java 很神奇的
從以前寫 C/C++ 的經驗 ,
總之 java 是一個神奇的東西
不能隨便轉型,
不像以前用 C/C++,
一個 point 搞定
我對 java 也不熟
不可把 C/C++ 的經驗 套用在 java , 尤其是轉型 ...

stalin 2014-12-05 01:41 PM

看起來單純是個多型的問題
我想只要在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 02:56 PM

你的問題寫成這樣子會比較好吧?

代碼:
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;
	}
}

T磨人 2014-12-05 03:07 PM

引用:
作者傳說
你的問題寫成這樣子會比較好吧?


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 機制), 沒有誰優誰差, 這是個人比較偏好的寫法, 盡量少用 一堆繼承,
個人經驗供參考.


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

vBulletin Version 3.0.1
powered_by_vbulletin 2025。