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

看板java作者 (淚眼問花花不語)時間11年前 (2013/04/27 14:31), 編輯推噓3(3014)
留言17則, 5人參與, 最新討論串1/5 (看更多)
對不起,又碰到觀念性問題想不通了,所以藉休息思考時間又來這邊尋找溫情.嘻 請問當程式跑到 Father f = new Son()後,從記憶體來看 不是就一個Stack區的變數f指向Heap區的一個Son物件嗎? 如果這時候執行f.show() 為什麼IntelliSense只能選擇父類別裡的show()? 但是如果父類跟子類同時有定義show(),即使選用的是父類的show() 卻是顯示子類show()的內容呢? 從物件來看,父類跟子類會有不同的方法跟成員變數,可以理解是不同的東西 但是變數的目的不是存值就是存參照,變數為什麼會有父跟子的區分呢? 謝謝. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 137.132.239.190

04/27 14:54, , 1F
把編譯時期和執行時期做的事搞清楚
04/27 14:54, 1F

04/27 14:57, , 2F
`f` 不一定要指向一個 `Son` 類別的物件
04/27 14:57, 2F
請問您的意思是,編譯器是根據宣告來設定IntelliSense的? 雖然這邊參照到子類 但是賦值是執行時期的問題? 所以要正常編譯成功,編譯時期只能選用父類有的方法 執行時期因為真正參照到的物件是子類,所以我們其實是拿編譯時期的父類方法來執行 執行時期的子類參照? 也就是要執行時期讓父類變數可以執行子類方法,必須要在 父類中定義想要執行的子類方法,這樣才能騙過編譯器而讓子類方法留下來? ※ 編輯: Shrugg 來自: 137.132.239.190 (04/27 15:36)

04/27 15:33, , 3F
override?
04/27 15:33, 3F
※ 編輯: Shrugg 來自: 137.132.239.190 (04/27 15:47)

04/27 16:38, , 4F
都已經明確寫在程式了~還有分執行和編譯時期?
04/27 16:38, 4F

04/27 18:37, , 5F
我指的就是原po修文裡的意思 思考方式不同而已
04/27 18:37, 5F

04/27 20:12, , 6F
我還是不了解您第二句的意思,為什麼f不一定指向Son物件?
04/27 20:12, 6F

04/27 20:15, , 7F
已經是Father f = new Son();為什麼還說不一定指向Son物件
04/27 20:15, 7F

04/27 20:20, , 8F
還是說您用詞太過精簡了,您的意思是編譯時期編譯器不知道f
04/27 20:20, 8F

04/27 20:23, , 9F
還不知道指向何處,所以是不一定? 直到Runtime才確定?
04/27 20:23, 9F

04/27 21:55, , 10F
編譯時期知道~但寫的時候可能不知道!彈性的程式就是這樣!
04/27 21:55, 10F

04/27 21:59, , 11F
直接指定當然知道~但是有時候可能不知道~你也不需要知道!
04/27 21:59, 11F

04/27 22:00, , 12F
就像新訓班長一開始需要知道入伍生叫啥嗎?不需要!反正叫你
04/27 22:00, 12F

04/27 22:07, , 13F
動起來~就是給我動起來~管你從哪裡來~媽媽嫁給誰...
04/27 22:07, 13F

04/27 22:10, , 14F
還是很難體會的話~就試著寫程式~用一種定義控制不同的物件
04/27 22:10, 14F

04/29 02:31, , 15F
現在單純的多型都要講得這麼深澳嗎...
04/29 02:31, 15F

04/29 20:04, , 16F
結果原po發現每個人都給他一個不同的解釋(逃
04/29 20:04, 16F

04/29 21:11, , 17F
不同?會嗎?不過這種東西沒實際寫過~還蠻難去體會的...
04/29 21:11, 17F
文章代碼(AID): #1HUt2rRu (java)
討論串 (同標題文章)
文章代碼(AID): #1HUt2rRu (java)