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

看板java作者 (Alien)時間12年前 (2013/05/22 06:39), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串8/13 (看更多)
有些觀念需要搞清楚。 你做的東西涉及兩個觀念:繼承和多型 這裡說的繼承不是指 Java 裡的 extend, 而是一個觀念。 你說的沒錯,把共同的東西放在 Father,然後 ChildA ChildB extends Father 時候,就會把那些共有的部份繼承下來,那麼 共有的部份就不必在每個 child 重新打造。直到這部份還是對 的。 可是 Java 的 extends 還涉及另一個觀念,就是多型。所謂多 型指的是一個 obj 能以不同面貌示人,比如 ChildA 就能以 Father 的面貌示人,用的人只要當它是一個 Father 就行。可 是問題就在於,當別人當它是 Father 使用,他就只能 "當成 Father" 去使用。 你的例子裡面, Father o = ......; // 這裡不要理會指向什麼 o.childASpecificMethod(); // 這裡出問題 你要當成一個 Father 使用,就真的只能用 Father 裡的東西, 因為在 compile 時,compiler 不會知道 o 會不會指向任何其 他 child 類,萬一o 指向一個 ChildB 怎麼辦?(qrtt1 站友 提到的 duck typing 是某些語言的解決方法,但 Java 並不用 這種做法) 簡單來說: 你要是想把 Child 當成 Father 操作,你就只能用操作 Father 的方式去操作它,想用到 ChildA 獨特的方法去操作,就就得把 它當成 ChildA。 說有違你本身的想法,那大概因為你沒搞清你的想法。你單純 是想把共有的東西繼承到 child? (你做到了)還是想把 child 能當成 father 去操作?(那就涉及在 Father 的API 要把這些 操作方式以 "對Father 而言有意義" 的方法 expose 出來了, 這部份你則完全沒在做,偏偏 Father o=..; o.doSomething; 就是在體現這部份)。 Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.19.42.175 ※ 編輯: adrianshum 來自: 223.19.42.175 (05/22 06:40)

05/22 08:05, , 1F
為甚麼看到這篇直覺想接「阿星,接力接力!」 XD
05/22 08:05, 1F

05/22 11:47, , 2F
有些語言沒有宣告這種東西 只有參考命名!!!
05/22 11:47, 2F
文章代碼(AID): #1Hc_UQ0I (java)
討論串 (同標題文章)
文章代碼(AID): #1Hc_UQ0I (java)