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