u013916480
炎意
采纳率50%
2019-12-10 16:21

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

5
已采纳

创建类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
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • Sanjay_yww Sanjay_yww 2年前

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

    点赞 1 评论 复制链接分享
  • wojiushiwo945you 毕小宝 2年前

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

    点赞 2 评论 复制链接分享

相关推荐