为什么即使变量已被覆盖,以下情况下的输出也会不同?
public class A {
int a = 500;
void get() {
System.out.println("a is " + this.a);
}
}
public class B extends A {
int a = 144;
}
public class mainmethod {
public static void main(String args[]) {
B ob = new B();
System.out.println("a is " + ob.a);
ob.get();
}
}
最佳答案
不存在覆盖变量之类的东西。 B
实际上有两个 名为 a
的实例变量:一个是它声明的,另一个是它继承的。看这个:
B ob = new B();
System.out.println("B.a is " + ob.a);
System.out.println("A.a is " + ((A)ob).a);
在 B
的实例方法中,您可以编写 super.a
或 ((A)this).a
来访问父级的变量。
关于java - 为什么两种情况下的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350894/