反射与super之间的问题,萌新求大佬指点

创建类A

public class A {
    public void func1() {
        System.out.println(this.getClass().getName()+"---func1");
    }
}

创建类B

public class B extends A{
    @Override
    public void func1() {
        super.func1();
        System.out.println(this.getClass().getName()+"---func1");
    }
}

在调用时:

public class Test {
    public static void main(String[] args) {
        A a = new B();
        a.func1();
    }
}

为何结果为:

cn.java.oop.B---func1
cn.java.oop.B---func1

而不是

cn.java.oop.A---func1
cn.java.oop.B---func1

感谢Sanjay yww与毕小宝
再测了把-》

public class Test {
    public static void main(String[] args) {
        A a = new B();
//      a.func1();
        System.out.println(a.getClass().getName());
    }
}

结果为:

cn.java.oop.B

A a = new B();
多态
实例a的classname已经是B,而你用的this,指的就是当前实例

这涉及到多态问题,因为虽然定义的是 A 类型,但是实际上是 B 的实例。
例子中虽然调用的父类的方法,但是 this 还是当前实例,即 B 类型。
this 始终指的是当前具体子类的实例的。