作者henry4343 (henry)
看板java
標題Re: [問題] 繼承與物件使用的問題?
時間Tue May 21 23:43:55 2013
前文恕刪
抱歉可能我的觀念錯很大
我直接用code來說好了
public Class Father {
}
public Class Child_A extends Father {
public String string_A;
}
public Class Child_B extends Father {
public ArrayList<String> arrayList_B;
}
//這邊執行
public Class Main {
private Father obj;
private void function_A {
obj = new Child_A;
obj.string_A //這行認不到
}
private void function_B {
obj = new Child_B;
obj.arrayList_B //這行認不到
}
}
程式到此為止 一開始我的想法是Child_A和Child_B有些相同的東西,有些不同的東西
所以又建立了一個Class Father來讓他們繼承,這樣相同的東西寫在Class Father,
不同的東西寫在各自的Class,我想說那這樣我只要一個Father obj的變數,
然後看我要用哪個Class的物件就new那個Class
結果這麼做以後我才發現完全不能這樣用…才會產生這種疑慮
如果我直接寫成下面這樣
public Class Main {
Child_A a;
Child_B b;
private void function_A {
a = new Child_A;
a.string_A //OK
}
private void function_B {
b = new Child_B;
b.arrayList_B //OK
}
}
就沒什麼問題,但這就有違我一開始的想法
其實我只是想要偷懶而已,因為如果還有Child_C,D,E,F我就要宣告好多變數)
看了大大們的解說,也許我一開始使用繼承的想法就不太對的樣子,
可能我的觀念還不是很清楚,所以一時間也還想不到更好更方便的管理方法。
也感謝回文的大大提供了很多幫助。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.97.175
推 coolcomm:一定要用宣告成 field 嗎? 為什麼不直接用區域變數? 05/21 23:59
→ henry4343:宣告成區域變數就不能再其他function內使用了 05/22 00:08
推 qrtt1:這麼想肯定是 bad smell 且不符合單一責任原則。 05/22 00:11
→ PsMonkey:懶要懶的有道理,你這樣等於要男人生孩子要女人長喉結 05/22 00:18
→ qrtt1:精確地說,你需要的是 c 的 struct/union 的混合物罷了。 05/22 00:22
→ coolcomm:原po可以稍微解釋一下拿到string_A/arrayList_B之後要做 05/22 00:30
→ coolcomm:什麼嗎? 05/22 00:31
→ henry4343:String_A/arrayList_B只是用來比喻object而已 05/22 09:26
推 tails32100:推猴大的比喻。提一下為何會需要這麼做的原因會更好, 05/22 10:00
→ tails32100:也許會有更適合的解法。 05/22 10:01
→ swpoker:TIJ !! 別的語言就沒有這種問題了 python ruby php.... 05/22 11:49