class B {
   int xB = 10;
}

class C extends B {
   int xB = 4;

   C() {
      System.out.println(super.xB);
      System.out.println(B.xB);
   }
}


我收到B.xB错误。它说xB不是静态的,因此您不能使用它。但这并没有给我super.xB一个错误。为什么?

最佳答案

当在子类中定义xB时,它基本上会隐藏超类的xB变量。因此,如果打印this.xB,将得到4。使用super是访问超类的隐藏变量的方法,并且与静态变量无关。另外,正如您正确地猜到的那样,由于xB是超类中的实例变量(非静态),因此无法仅使用类名来访问它。

你可以试试

class C extends B {
    int xB = 4;

    C() {
        System.out.println(this.xB);
        System.out.println(super.xB);
        System.out.println(((B)this).xB); //same behavior as super.xB
        //System.out.println(B.xB); // Not allowed as xB is not static in B
    }
}


你会得到

4
10
10

10-08 09:12