日期:2014-05-20  浏览次数:20615 次

求高人指点迷津 啊
public class Base {
int x;
Base()
{
x=5;
}
public void show()
{
System.out.println(x);
}

}




public class Sub extends Base {
Sub()
{
x=9;
}

}



public class Test {
public static void main(String[] args) {
Sub sub =new Sub();
Base base =new Base();
base.show();
sub.show();
为什么不是5,5啊



------解决方案--------------------
刚刚说了,
Base base =new Base();
base中有一个地方开辟了内存,仅为base
x为原始值,x=5

Sub sub =new Sub();
sub的内应有两地方开辟了内存,一个为base(父类),一个为sub(父类的扩展)
中,你将x设为了9,那么父类(base)中的x已经改变,sub.show()输出为9。
------解决方案--------------------
new的意思就是单独开辟一个内存,用于存放对象。
因为你的两个new分别声明了两个对象,占用两个完全不同的内存。

base对象占用一个空间。
sub占用一个空间。(sub中包含一个base,却与上面的base在不同的内存地址中)
------解决方案--------------------
他们又不是共用内存,当然不一样了,而且又不是覆盖