Re: [問題] 繼承與物件使用的問題?

看板java作者 (henry)時間12年前 (2013/05/21 23:43), 編輯推噓3(308)
留言11則, 6人參與, 最新討論串7/13 (看更多)
前文恕刪 抱歉可能我的觀念錯很大 我直接用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

05/21 23:59, , 1F
一定要用宣告成 field 嗎? 為什麼不直接用區域變數?
05/21 23:59, 1F

05/22 00:08, , 2F
宣告成區域變數就不能再其他function內使用了
05/22 00:08, 2F

05/22 00:11, , 3F
這麼想肯定是 bad smell 且不符合單一責任原則。
05/22 00:11, 3F

05/22 00:18, , 4F
懶要懶的有道理,你這樣等於要男人生孩子要女人長喉結
05/22 00:18, 4F

05/22 00:22, , 5F
精確地說,你需要的是 c 的 struct/union 的混合物罷了。
05/22 00:22, 5F

05/22 00:30, , 6F
原po可以稍微解釋一下拿到string_A/arrayList_B之後要做
05/22 00:30, 6F

05/22 00:31, , 7F
什麼嗎?
05/22 00:31, 7F

05/22 09:26, , 8F
String_A/arrayList_B只是用來比喻object而已
05/22 09:26, 8F

05/22 10:00, , 9F
推猴大的比喻。提一下為何會需要這麼做的原因會更好,
05/22 10:00, 9F

05/22 10:01, , 10F
也許會有更適合的解法。
05/22 10:01, 10F

05/22 11:49, , 11F
TIJ !! 別的語言就沒有這種問題了 python ruby php....
05/22 11:49, 11F
文章代碼(AID): #1HcvOzlK (java)
討論串 (同標題文章)
文章代碼(AID): #1HcvOzlK (java)