看板 java 關於我們 聯絡資訊
前文恕刪 抱歉可能我的觀念錯很大 我直接用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