class A
{
   int i = 1;
}class B extends A
{
   int i = 2;
   public static void main(String[] args)
   {
       A a = new B();//这里的句柄类型A起了什么作用?JAVA的隐藏机制是怎样实现的?
       System.out.println(a.i);
    }
}
运行结果:
1哪位兄台能告诉我?

解决方案 »

  1.   

    你需要明白,Java类的属性是不支持Overwrite的,也就说方法是可以,但属性是不可以.
    a.i访问的是类A(因为此时JVM认为是类A的实例)的属性i,所以是1而不是2,如果((B)a).i就是2了.
      

  2.   

    http://blog.csdn.net/f_acme/archive/2006/02/28/611878.aspx
      

  3.   

    重写和隐藏是不是一个概念,即 如果父类的一个方法能被子类的方法重写,那么,就意味着子类的方法隐藏了父类的方法。你们在这种情况下怎么才能访问到父类的方法呢,是不是要用super?