Re: [問題] 物件強制轉型
※ 引述《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
討論串 (同標題文章)