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

看板java作者 (swpoker)時間11年前 (2013/04/29 15:32), 編輯推噓2(209)
留言11則, 6人參與, 最新討論串5/5 (看更多)
你把物件的實體跟參考混在一起了 還有JAVA是不會讓你知道記憶體的東西 也不會讓你知道物件在記憶體的實際配置的 所以我們只看的到物件 不要再去管什麼記憶體了 那不關你的事也不關我的事 你這個問題 在JAVA的參考書裡面關於物件生成的流程可以解釋你的問題 (我上課的時候把那個流程圖看了很久 不過那是1.4版 還是SUN出的教科書) 所謂 Father f = new Son() 這句話 Father代表的某種參考的規格是什麼 f為一個參考 new 表示要建構一個物件 Son()為建構一個實際物件的規格是什麼 所以Father只是一個用來參考的規格而已 實際上呼叫的變數函式範圍是以Son為主 而繼承是可用來做為該物件規格的預設值 既然都是預設了所以也可以更改的 在此要注意的是範圍的界定 不要去計較倒底是父還是子(因為繼承可以很多層) 只要注意的該變數函式的範圍是在哪一個類別的範圍 例如 Father f = new Son(); f.show(); 實際上呼叫的方式為 先去該真正連結的物件的類別(規格)中找看看有沒有show的函式 所以是去Son的類別找看看有沒有show的函式 如果沒有的話 就去Son的上一層看看有沒有 沒有的話 再去Son的上一層的上一層看有沒有 ... 然後就會在某層(個)類別中找到該show之後 就去執行他 結論就是不要再去關心記憶體了 那不干你跟我的事 ※ 引述《Shrugg (淚眼問花花不語)》之銘言: : 對不起,又碰到觀念性問題想不通了,所以藉休息思考時間又來這邊尋找溫情.嘻 : 請問當程式跑到 Father f = new Son()後,從記憶體來看 : 不是就一個Stack區的變數f指向Heap區的一個Son物件嗎? : 如果這時候執行f.show() 為什麼IntelliSense只能選擇父類別裡的show()? : 但是如果父類跟子類同時有定義show(),即使選用的是父類的show() : 卻是顯示子類show()的內容呢? : 從物件來看,父類跟子類會有不同的方法跟成員變數,可以理解是不同的東西 : 但是變數的目的不是存值就是存參照,變數為什麼會有父跟子的區分呢? : 謝謝. -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.29.28.131

04/29 21:13, , 1F
不管記憶體?亂寫亂設計亂配置也是會out of memory的耶...
04/29 21:13, 1F

04/29 22:30, , 2F
囧? 敢問要怎麼配置.... @_@
04/29 22:30, 2F

04/29 23:37, , 3F
某些平台或情況吧 像是Android沒弄好常常發生...
04/29 23:37, 3F

04/30 01:52, , 4F
對1樓感興趣+1
04/30 01:52, 4F

04/30 12:47, , 5F
只要亂亂寫就會有~但跟"配置記憶體"無關,是程式的物件架構
04/30 12:47, 5F

04/30 13:01, , 6F
所以還是回歸要怎麼設計物件架構這個問題~例如flyweight?
04/30 13:01, 6F

04/30 13:38, , 7F
版上有人問過 "物件"的記憶體有多大?區塊在那裡?怎麼釋放?
04/30 13:38, 7F

04/30 15:59, , 8F
Java的設計宗旨(&優勢)就是不要去管這些東西
04/30 15:59, 8F

04/30 19:22, , 9F
囧 其實我講的是"配置物件"~至少要注意一下生命週期吧...
04/30 19:22, 9F

05/01 08:46, , 10F
樓上對不起!!我誤會你啦!!
05/01 08:46, 10F

05/02 23:49, , 11F
over heap的問題是會有的, 不過是在jvm承受不起的狀況
05/02 23:49, 11F
文章代碼(AID): #1HVY8AIw (java)
討論串 (同標題文章)
文章代碼(AID): #1HVY8AIw (java)