A a = new B()在Java中到底是什么意思

Gag*_*kut 2 java object

我知道为什么a.get()返回20,这是因为动态绑定,因为B对象是在运行时创建的,所以它get()在类B中调用了

但是为什么要a.x打印10?

class A {
  int x = 10;

  int get() {
     return x;
  }
}

class B extends A {
  int x = 20;

  int get() {
    return x;
  }
}

class Main {
  public static void main(String[] args) {
    A a = new B();
    System.out.println(a.get()); //20
    System.out.println(a.x); //10
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您还可以在此处解释用于存储对象的内存。

Phi*_*lip 5

仅仅是因为在Java中,只有方法才是多态的,而不是字段。当您引用一个字段时,编译器将使用声明的类型。引用方法时,运行时动态调度将选择正确的多态操作。