关于 this 关键字,在多态中通过 this 访问属性,属性的值是看编译类型吗?

class test21 {

int a=1;

public void aaa(){
    System.out.println("父类的 "+this.a);
}

public static void main(String[] args) {
   test21 tt = new A();
    tt.aaa();
    System.out.println(tt.a);

}

}

class A extends test21 { // 子类继承父类

 int a=2;

public void aaa(){
    System.out.println("子类的 "+this.a);
}

}

我的疑问是:我在父类中和子类中各写了一个属性a ,在主方法中创建子类对象,然后使用父类引用指向子类对象,子类再重写父类方法,然后我用父类引用 tt 调用 这个方法,(我记得哪个对象调用 this 就是指的那个对象)我知道输出的是子类中方法但是子类中的这个this.a 相当于 tt.a对吗?可是tt 的编译类型是父类呀,为什么输出的值不是父类中的 1 呀

多态简单来说就是父类引用指向子类对象。而且父类有的子类都有,除了类级别的和静态的。所以你可以简单的理解它会优先调用等号右边的子类里的方法。

这就是Java语言的多态特性,运行时决定了调用的是子类对象的方法,子类覆写了父类的方法,因此调用的是子类。