关于Java多态引用和this的问题,希望大家能帮我解答一下,困扰好久了
public class Test {
public static void main(String[] args) {
A a = new B();
a.show();
}
}
class A {
int x = 50;
public void show() {
System.out.println(this.x);
}
}
class B extends A {
int y = 100;
@Override
public void show() {
this.y = 200;
this.showB();
System.out.println(this.y);
}
public void showB() {
System.out.println("我是子类的showB方法");
}
}
输出的结果就是
我是子类的showB方法
200
问题来了,a.show()此时a调用的是在子类中重写过的show方法。dan在类B里的show方法中,this表示调用此方法的对象,那么此时this是a,可是a此时是A类声明但指向B类,也就是转型,应该只保留父类A里的方法和属性才对,为什么此时还是输出子类B中独有的属性y和方法showB呢。