Re: [問題] 父變數指到子物件的繼承問題

看板java作者 (人生只有一次)時間11年前 (2013/04/27 16:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
※ 引述《Shrugg (淚眼問花花不語)》之銘言: : 對不起,又碰到觀念性問題想不通了,所以藉休息思考時間又來這邊尋找溫情.嘻 : 請問當程式跑到 Father f = new Son()後,從記憶體來看 : 不是就一個Stack區的變數f指向Heap區的一個Son物件嗎? : 如果這時候執行f.show() 為什麼IntelliSense只能選擇父類別裡的show()? : 但是如果父類跟子類同時有定義show(),即使選用的是父類的show() : 卻是顯示子類show()的內容呢? : 從物件來看,父類跟子類會有不同的方法跟成員變數,可以理解是不同的東西 : 但是變數的目的不是存值就是存參照,變數為什麼會有父跟子的區分呢? : 謝謝. 把 Father 換成 動物 把 Son 換成 鴨子 把 show 換成 走 即: 動物 f = new 鴨子(); 定義 f 為動物,而且這個動物是鴨子 而在操作的時候,光看 f 怎麼會知道它是鴨子還是鳥~或是別的動物? 所以當然只能選擇父類別(動物)裡的 走() 而這個走()的方法~在父類別裡面不是有實作~就是有 abstract 要子類別實作 鴨子繼承了動物這個類別~也就理所當然有 走() 這個方法 差別在於子類別是否要自己實作 父類別有實作就是用父類別的~除非被子類別覆寫掉了 再講簡單一點 現在我有一堆動物~老虎、鴨子、兔子、人...等等 之所以定義成父類別,就是不打算知道那是什麼動物 要牠去哪就去哪~走()就對了!!! 至於這些動物怎麼走()? 當然就要這些動物自己去實作 所以當然是顯示子類別的內容... (除非父類別有實作~而子類別沒覆寫) 建議原PO可以看看"深入淺出-設計模式"第一章 上面的例子其實比較偏向"介面" 但是個人認為這樣說明比較容易理解 通常之所以要弄成父類別和子類別 就是子類別為了要有父類別的"東西" 就像我老爸是李嘉誠~我當然想要繼承他的財產和能力 乍看之下很好!!! 可是...有句話叫"父債子償" 既然繼承了~就是全部都收了!不論好壞! 當然最顯而易見的問題就是老爸的東西~你不見得全部都喜歡 一旦繼承多了~就像政府舉債一樣~債留子孫! 後面的為了合乎所用~覆寫再覆寫~牽制再牽制 然後就天下大亂了...Q_Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.152.17 ※ 編輯: andymai 來自: 122.117.152.17 (04/27 17:18)
文章代碼(AID): #1HUuuhty (java)
討論串 (同標題文章)
文章代碼(AID): #1HUuuhty (java)