作者iloveelva (iloveelva)
看板java
标题Re: [问题] 物件强制转型
时间Tue Dec 29 15:44:01 2009
※ 引述《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