Re: [問題] 繼承與物件使用的問題?
有些觀念需要搞清楚。
你做的東西涉及兩個觀念:繼承和多型
這裡說的繼承不是指 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
05/22 08:05, 1F
→
05/22 11:47, , 2F
05/22 11:47, 2F
討論串 (同標題文章)
完整討論串 (本文為第 8 之 13 篇):
問題
11
11