看板 java 關於我們 聯絡資訊
你把物件的實體跟參考混在一起了 還有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
andymai:不管記憶體?亂寫亂設計亂配置也是會out of memory的耶... 04/29 21:13
PsMonkey:囧? 敢問要怎麼配置.... @_@ 04/29 22:30
cha122977:某些平台或情況吧 像是Android沒弄好常常發生... 04/29 23:37
s3748679:對1樓感興趣+1 04/30 01:52
swpoker:只要亂亂寫就會有~但跟"配置記憶體"無關,是程式的物件架構 04/30 12:47
swpoker:所以還是回歸要怎麼設計物件架構這個問題~例如flyweight? 04/30 13:01
swpoker:版上有人問過 "物件"的記憶體有多大?區塊在那裡?怎麼釋放? 04/30 13:38
cha122977:Java的設計宗旨(&優勢)就是不要去管這些東西 04/30 15:59
andymai:囧 其實我講的是"配置物件"~至少要注意一下生命週期吧... 04/30 19:22
swpoker:樓上對不起!!我誤會你啦!! 05/01 08:46
realmeat:over heap的問題是會有的, 不過是在jvm承受不起的狀況 05/02 23:49