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

看板java作者 (swpoker)時間12年前 (2013/05/20 17:11), 編輯推噓4(404)
留言8則, 3人參與, 最新討論串4/13 (看更多)
java把宣告跟物件分的很清楚 宣告是代表類別可以使用的成員包括屬性跟方法 物件就是實際上運作的物件 這兩個是不太一樣的 A obj = new C(); 其中 A是宣告可以是介面 抽象或是類別 C就真的是一個某個類別建構式 你的問題在符合以下的狀況嗎 interface A abstract class B implements A class C extnes B A obj1 = new B(); 可以這樣寫嗎 會錯誤給你看 因為抽象B 介面A 是不可能成為物件的 因此你的問題並不是繼承問題 只是說能不能用繼承去滿足 但繼承不能這樣用 你的問題應該是如何去操控物件 操控物件在JAVA是非常爛的-reflect 可這就是JAVA的特性 這是我覺得很爛的地方 也是覺得很好的地方 很爛的地方是操控物件的能力實在太不直覺了 太不方便了 很好的地方就是很嚴謹 可嚴格的規範物件 避免不知道哪裡寫錯了或亂亂寫 我寫python就可以照你的方式跟想法寫 而且很簡單 可是JAVA就不行 就算行也會弄得很麻煩 這是JAVA爛的地方也是好的地方 如果只有我寫 我會選擇python 如果是大家寫 我會選擇java 基本上類別的用法不該這樣用 就算可以這樣用 也要避免這樣用 只是我想釐清你的問題應該是 "如何操控物件" 這件事嗎 ※ 引述《henry4343 (henry)》之銘言: : 各位好 : 請問各位一個問題 : 我宣告了一個class A : public class A { : } : 然後又宣一個class B 繼承 A : public class B extends A { : } : 因為還有其他class也繼承A,所以我在其他class宣告的時候這樣寫 : public class Main { : //用A來宣告物件,當new時才決定物件型態 : private A myObject; : public function() { : myObject = new B(); : 這個時候問題來了...... : 假如我在Class B中寫了一個public String myString = "123"; : 可是myObject.myString會錯誤,好像找不到myString的樣子 : 我一定要把myString寫在Class A裡面 : 才有辦法使用myObject.myString : 因為我還有其他Class繼承Class A,但每個繼承的Class又希望有自己的物件 : 然後我想要宣告一個全域變數,在我想要的地方在把它宣告成我要的物件 : 我有辦法在各自繼承Class A的Class內寫自己的物件並且使用這種宣告方式來 : 存取各自的物件嗎? : 或者有其他的方法可以達成我想要的需求?感謝各位大大解答了... : } : } -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.29.29.131

05/20 21:58, , 1F
如果JAVA可以那樣寫 大概會出現一堆宣告Object的吧...
05/20 21:58, 1F

05/21 09:39, , 2F
應該是你講的這樣 我想做的是讓class繼承某個class
05/21 09:39, 2F

05/21 09:41, , 3F
然後class又可以擁有各自的物件讓我使用
05/21 09:41, 3F

05/21 09:44, , 4F
如果直接把每個class都宣告成物件就解決了 但這樣很麻煩
05/21 09:44, 4F

05/21 09:46, , 5F
所以才宣告父類別,然後在我要的地方建成我要的class
05/21 09:46, 5F
繼承是用來作為垂直物件架構的問題 是把宣告跟實作切割開來 所以繼承應該沒辦法符合你的需求 我是應該會採用 將需要分開使用的物件用成bean的方式 利用state的方式來做 然後再建構式或是設定來做 又或者只好利用map來模擬? 通常來說 如果我有一堆操作物件 然後方法都一樣 只是參數不同的話 那我會把參數集中起來成為一個參數物件 將之傳入各個操作物件中 那這些物件其實應該是水平類型 採用prototype的方式來做 就不會用繼承的方式來用了 不然可能就要用一些 "物件描述腳本" 的架構來模擬了 例如 我想要有一些參數想要使用 String strA; int intB; Object objC; 原本上述的這些都會散在各個操作物件中 那麼將其集中在參數物件中 然後各個操作物件就只要導入該參數物件即可 我只是想要說 應該不太適用 繼承 來做 用 原型 來做應該比較適合 如果你想要替這些操作物件有個歸宿的話 可以找個介面讓這些物件有個名分也可以 其實還是要看這些操作物件 可以歸類到什麼程度就是 看是說只要弄個介面 有個名分就好 還是說有很高度的相似度 所以弄個抽象+樣板也可以 但還是取決你對於你要操作物件s 的依據是什麼 不過老實說 如果只是個名分的話 其實也不用強加繼承 (也就是不用太OO拉) 因為都是虛名阿 XD ※ 編輯: swpoker 來自: 163.29.28.131 (05/21 10:48)

05/21 11:31, , 6F
我覺得你好強,我都看不懂他想問什麼 [遮臉]
05/21 11:31, 6F
他的問題我之前有想過 然後我發現我想錯了 我發現會有這種想法通常都是把類別跟物件的定義沒有弄得很清楚 所以會把類別跟物件搞混了 以為類別就是物件 物件就是類別 然後再把宣告跟類別跟物件在通通稿混 老實說 這是語言的特性 之前我看過一篇文章 有人用 動/靜態 強/弱繫別 去針對語言做分類 然後我才發現我想錯了 也了解了這就是TIJ(This Is Java)(出自血鑽石的TIA) 他想要動態操控物件及其相關屬性 然後想要用繼承來解決 (動態特性的語言就沒有這個問題了) 可是java是靜態+強繫別的特性 造成無法這樣做 你就是不能動態的去增減物件相關的成員->因為類別就確定了 而且物件的成員就在宣告的時候就確定了->編譯的時候就行不通了 TIJ !!! ※ 編輯: swpoker 來自: 163.29.29.131 (05/21 11:48)

05/21 11:49, , 7F
不是 This is Sparta 嗎? [逃]
05/21 11:49, 7F

05/21 18:41, , 8F
感謝回答
05/21 18:41, 8F
文章代碼(AID): #1HcUZVj2 (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 4 之 13 篇):
文章代碼(AID): #1HcUZVj2 (java)