Java中类属性的值

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?

Roh*_*ain 5

让我们理解这些代码行:

a = new B();
a.test();
System.out.println(a.x);
Run Code Online (Sandbox Code Playgroud)
  • 你创建一个新的对象B.它将重新初始化变量 - A.x = 0B.x = 0.
  • 然后调用a.test(),它将调用test()类中的重写方法B,该方法将设置B.x2using this.x = 2;.注意到这一点,A.x仍然是0.
  • 然后你访问a.x,它将访问x课堂上的字段A.这些字段不是多态的.您不会覆盖字段,但隐藏它们.变量xB隐藏变量xA.