The value is 2;The value is 2;

解决方案 »

  1.   

    The value is 2
    The value is 3 
      

  2.   

    The value is 2
     The value is 3 我用JB6.0跟踪内存数据时,数据x一直为2 。
      

  3.   

    答案是The value is 2The value is 3
    至于为什么我来说说:
    JAVA中所有的方法都采用后期绑定,也就是相当于C++中的虚函数动态绑定。但对于属性却不是后期绑定,而是早期绑定,所以b.show()的时候调用的是Derived类的show()方法。而b.x=3
      

  4.   

    在java中,当子类定义了与父类同名的属性变量时,即出现了子类变量对同名父类变量的隐藏。
    所谓隐藏就是指子类拥有两个同名变量,一个继承自父类,一个由自己定义。当子类执行继承自父类的操作时,处理的是继承自父类的变量,当执行由子类本身定义的操作时,处理就是自己定义的变量,而把继承自父类的变量“隐藏”起来。
    也就是说,在Derived类创建的时候,分配了两个x的空间,但是对于外部来说,它只有一个变量x。
    而方法的继承则和域中变量的继承不一样:当父类中一个方法被子类覆盖时,它所占用的内存空间将被完全清空,父类的方法在子类中将不复存在。
    Base类的对象b的创建是通过new一个Derived来完成的,因此b这个句柄指向的对象其实是Derived类的一个实例,在实例b中,内存空间中分配了两个同名的x,b.show()由于在Derived类里被覆盖了,调用的也是Derived类里面的show()方法,因此这个show()操作的是Derived类里面的x,所以值为2。而b.x=3是因为b的类型是Base,b.x是显式的调用Base类里继承的变量x,所以显示的是Base类所赋的值。
      

  5.   

    我非常佩服蓝雪的认真和耐心,交个朋友好吗,[email protected].
      

  6.   

    The value is 2The value is 3
      

  7.   

    谢谢大家的夸奖
    其实我也是从这个学期才刚开始学java的
    希望和大家一起共同提高
    [email protected]