Mar*_*sik 4 java oop variables overriding local
我不明白它是如何工作的.
我们有两个A类和B类.B类扩展A.A类有x属性,以及修改该属性的测试方法.B类具有x属性,以及修改该属性的测试方法.
public class A {
int x;
public void test() {
this.x = 1;
System.out.println("A" + getX());
}
int getX() {return x;}
}
public class B extends A {
int x;
public void test() {
this.x = 2;
System.out.println("B" + getX());
}
int getX() {return x;}
}
public class Main {
public static void main(String[] args) {
A a = new A();
a.test();
System.out.println(a.getX());
System.out.println("point 1");
a = new B();
a.test();
System.out.println(a.x);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
A1
1
point 1
B2
0
Run Code Online (Sandbox Code Playgroud)
我对最后一行输出的预测是2,但是为什么是0?
让我们理解这些代码行:
a = new B();
a.test();
System.out.println(a.x);
Run Code Online (Sandbox Code Playgroud)
B.它将重新初始化变量 - A.x = 0和B.x = 0.a.test(),它将调用test()类中的重写方法B,该方法将设置B.x为2using this.x = 2;.注意到这一点,A.x仍然是0.a.x,它将访问x课堂上的字段A.这些字段不是多态的.您不会覆盖字段,但隐藏它们.变量x在B隐藏变量x中A.