Re: [問題] 繼承與物件使用的問題?
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
05/20 21:58, 1F
推
05/21 09:39, , 2F
05/21 09:39, 2F
→
05/21 09:41, , 3F
05/21 09:41, 3F
→
05/21 09:44, , 4F
05/21 09:44, 4F
→
05/21 09:46, , 5F
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
05/21 11:49, 7F
推
05/21 18:41, , 8F
05/21 18:41, 8F
討論串 (同標題文章)