看板 java 關於我們 聯絡資訊
對不起,又碰到觀念性問題想不通了,所以藉休息思考時間又來這邊尋找溫情.嘻 請問當程式跑到 Father f = new Son()後,從記憶體來看 不是就一個Stack區的變數f指向Heap區的一個Son物件嗎? 如果這時候執行f.show() 為什麼IntelliSense只能選擇父類別裡的show()? 但是如果父類跟子類同時有定義show(),即使選用的是父類的show() 卻是顯示子類show()的內容呢? 從物件來看,父類跟子類會有不同的方法跟成員變數,可以理解是不同的東西 但是變數的目的不是存值就是存參照,變數為什麼會有父跟子的區分呢? 謝謝. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 137.132.239.190
coolcomm:把編譯時期和執行時期做的事搞清楚 04/27 14:54
coolcomm:`f` 不一定要指向一個 `Son` 類別的物件 04/27 14:57
請問您的意思是,編譯器是根據宣告來設定IntelliSense的? 雖然這邊參照到子類 但是賦值是執行時期的問題? 所以要正常編譯成功,編譯時期只能選用父類有的方法 執行時期因為真正參照到的物件是子類,所以我們其實是拿編譯時期的父類方法來執行 執行時期的子類參照? 也就是要執行時期讓父類變數可以執行子類方法,必須要在 父類中定義想要執行的子類方法,這樣才能騙過編譯器而讓子類方法留下來? ※ 編輯: Shrugg 來自: 137.132.239.190 (04/27 15:36)
cha122977:override? 04/27 15:33
※ 編輯: Shrugg 來自: 137.132.239.190 (04/27 15:47)
andymai:都已經明確寫在程式了~還有分執行和編譯時期? 04/27 16:38
coolcomm:我指的就是原po修文裡的意思 思考方式不同而已 04/27 18:37
Shrugg:我還是不了解您第二句的意思,為什麼f不一定指向Son物件? 04/27 20:12
Shrugg:已經是Father f = new Son();為什麼還說不一定指向Son物件 04/27 20:15
Shrugg:還是說您用詞太過精簡了,您的意思是編譯時期編譯器不知道f 04/27 20:20
Shrugg:還不知道指向何處,所以是不一定? 直到Runtime才確定? 04/27 20:23
andymai:編譯時期知道~但寫的時候可能不知道!彈性的程式就是這樣! 04/27 21:55
andymai:直接指定當然知道~但是有時候可能不知道~你也不需要知道! 04/27 21:59
andymai:就像新訓班長一開始需要知道入伍生叫啥嗎?不需要!反正叫你 04/27 22:00
andymai:動起來~就是給我動起來~管你從哪裡來~媽媽嫁給誰... 04/27 22:07
andymai:還是很難體會的話~就試著寫程式~用一種定義控制不同的物件 04/27 22:10
KanoLoa:現在單純的多型都要講得這麼深澳嗎... 04/29 02:31
coolcomm:結果原po發現每個人都給他一個不同的解釋(逃 04/29 20:04
andymai:不同?會嗎?不過這種東西沒實際寫過~還蠻難去體會的... 04/29 21:11