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
时,它基本上隐藏了父类(super class)的xB
变量。所以如果你打印this.xB
,你会得到4。使用super
是访问父类(super class)隐藏变量的方法,它与静态变量无关。另外,正如您正确猜测的那样,由于 xB
是父类(super class)中的实例变量(非静态),因此您无法仅使用类名来访问它。
你可以试试
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
关于java - 为什么super可以访问父类(super class)的非静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34369007/