Re: [問題] 父變數指到子物件的繼承問題
※ 引述《Shrugg (淚眼問花花不語)》之銘言:
: 對不起,又碰到觀念性問題想不通了,所以藉休息思考時間又來這邊尋找溫情.嘻
=="
我真的覺得你對 Java 版的誤會很深
其實這個也算是經典 FAQ 了
但是,我也不知道該給你什麼關鍵字爬文 [炸]
: 請問當程式跑到 Father f = new Son()後,從記憶體來看
: 不是就一個Stack區的變數f指向Heap區的一個Son物件嗎?
: 如果這時候執行f.show() 為什麼IntelliSense只能選擇父類別裡的show()?
^^^^^^^^^^^^
敢問這是啥東西(對不起,我應該先 google [逃])
: 但是如果父類跟子類同時有定義show(),即使選用的是父類的show()
: 卻是顯示子類show()的內容呢?
: 從物件來看,父類跟子類會有不同的方法跟成員變數,可以理解是不同的東西
: 但是變數的目的不是存值就是存參照,變數為什麼會有父跟子的區分呢?
: 謝謝.
我覺得 andymai 跟 coolcomm 回的都很好
但是好到我這種智商有點看不懂 [淚目]
所以我也用我的方法詮釋一下...
反正這種合理的灌水方式應該不會有人反對 \囧/
請想像一下期中考的場景(大學應該剛考完吧?)
同學們來自四面八方
雖然唐僧有說過「妖是妖他媽生的,人是人他媽生的」
但是對於教授來說,管你是誰生的,對他來講就是學生
而學生就要能考期中考 (謎之聲:WTF)
//在班級組成的時候
學生[] 班級成員 = new 學生[3];
班級成員[0] = new 人();
班級成員[1] = new 妖();
班級成員[2] = new 人妖();
//考試的時候管你是人還是妖,反正每個人都給我交卷
ArrayList<考卷> 期中考考卷 = new ArrayList<考卷>;
for(學生 foo : 班級成員) {
期中考考卷.add(foo.交卷(期中考題目));
}
但是如果全班不管是人、妖、還是人妖
交出來的考卷都一模一樣,擺明了就是作弊,這不科學
應該每個人有自己寫考卷的方法
當然,也可以設計 `學生` 這個 class 本來就有 `交卷()` 這個 method
我大概會設計成
public 考卷 交卷(考卷 題目) {
return 題目; //就是交白卷啦 \囧/
}
這樣如果同學不上進,不實作自己的 `交卷()` method
系統也不會 crash...
至於人、妖、人妖、學生(以及其他可能的 class)
疊出來的 class 大樓會不會有多重繼承之類 blahblah 的困擾......
下課! 下課!
--
錢鍾書: 說出來的話
http://www.psmonkey.org
比不上不說出來的話
Java 版 cookcomic 版
只影射著說不出來的話
and more......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.162.248.51
討論串 (同標題文章)