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啊

解决方案 »

  1.   

    刚刚说了,
    Base base =new Base();
    base中有一个地方开辟了内存,仅为base
    x为原始值,x=5Sub sub =new Sub();
    sub的内应有两地方开辟了内存,一个为base(父类),一个为sub(父类的扩展)
    中,你将x设为了9,那么父类(base)中的x已经改变,sub.show()输出为9。
      

  2.   

    如果再输出一个base.show()为什么不是9啊,不是说父类(base)中的x已经改变,不知道您懂我哪里没明白不
      

  3.   

    new的意思就是单独开辟一个内存,用于存放对象。
    因为你的两个new分别声明了两个对象,占用两个完全不同的内存。base对象占用一个空间。
    sub占用一个空间。(sub中包含一个base,却与上面的base在不同的内存地址中)