Re: [問題] 物件強制轉型

看板java作者 (iloveelva)時間16年前 (2009/12/29 15:44), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《JeffMcBride (life is magic)》之銘言: : 各位先進大家好 : 希望大家幫忙解答小弟的問題 : class F{ : int a = 5; : void change(){a++;} : } : public class S extends F{ : int a = 6; : void change(){a++;} : public static void main(String[] s){ : F f = new S(); : f.change(); : System.out.print(f.a); // 印出5 : System.out.print(((S)f).a); // 印出7 : } : } : 在 F型態 的 f 指派 S實體 後,F觀點執行change(), : 理論上執行override的change(),但F執行change()後, : 是更改了 S實體 中的變數a=6,所以印出f.a時,仍為5。 : 那麼在JVM中記憶體如何配置呢? : 是有一個實體S,但是存在F的變數成員嗎? : 所以有一份F的變數a,也有一份S的變數a嗎? : 我這樣認知是對的嗎? : 謝謝! 是的 記憶體裡面會有兩個A變數 會依照使用者的取出方法而決定哪一個A 可以想像在建立f物件時候 記憶體就分配了兩個區塊 一個是父類別的 一個是子類別的 並不是兩個f 物件 只是把父子類別區分出去 而A變數在子類別裡面只是遮蔽了父類別 的變數A 在程式執行的時候 JVM在動態的去抓取A變數 依照使用者的程式去抓取 OK!!有說錯的話在指正一下吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.45.167
文章代碼(AID): #1BERD4lj (java)
討論串 (同標題文章)
文章代碼(AID): #1BERD4lj (java)