class A{
  public int field = 2;
}class B extends A{
  public int field = 1;
}public class Test{
  public static void main(String[] args) {
    
    B b= new B();
    System.out.println("b.field = " + b.field);    A a = b;
    System.out.println("a.field = " + a.field);  }
} 输出结果:
b.field = 1
a.field = 2a不是指向b的存储区吗,为什么a.field = 2 而不是 = 1?

解决方案 »

  1.   

    a的引用指向b,调用相同的方法的时候,调用的是b的方法,但是调用变量的时候,其实调用的还是自己的变量。
    class A{ 
      public int field = 2; 
      public void print() {
        System.out.println("A");
      }
    } class B extends A{ 
      public int field = 1; 
      public void print() {
        System.out.println("B");
      }
    } public class Test{ 
      public static void main(String[] args) { 
        
        B b= new B(); 
        System.out.println("b.field = " + b.field);     A a = b; 
        System.out.println("a.field = " + a.field); 
        a.print();
      } 

    输出结果: 
    b.field = 1 
    a.field = 2 
    B