Re: [問題] 父變數指到子物件的繼承問題
你把物件的實體跟參考混在一起了
還有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
04/29 21:13, 1F
推
04/29 22:30, , 2F
04/29 22:30, 2F
→
04/29 23:37, , 3F
04/29 23:37, 3F
推
04/30 01:52, , 4F
04/30 01:52, 4F
→
04/30 12:47, , 5F
04/30 12:47, 5F
→
04/30 13:01, , 6F
04/30 13:01, 6F
→
04/30 13:38, , 7F
04/30 13:38, 7F
→
04/30 15:59, , 8F
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
05/02 23:49, 11F
討論串 (同標題文章)