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语言的多态特性,运行时决定了调用的是子类对象的方法,子类覆写了父类的方法,因此调用的是子类。