繁体   English   中英

使用Java中的反射调用重写的实例方法

[英]Invoke an overridden instance method using reflection in java

我想这样做: 使用反射调用重写的基本方法,但是

  • 用Java完成
  • 并且在子方法上未指定@Override时(这是当我无权访问源代码时)

我有:


package test;

public class A{
  public String toString(){
    return "A";
  }
}

package test;

public class B extends A{
  public String toString(){
    return "B";
  }
}

我想要((A)(new B())).toString()是“ A”,而不是“ B”。 有没有办法通过反射来做到这一点?

MethodHandles可用于调用超类方法:

https://www.baeldung.com/java-method-handles

您的挑战(我希望((A)(new B())).toString()为“ A”,而不是“ B”。)与反射完全无关。 即使您在Java程序中执行((A)(new B())).toString()而没有进行反射,它也将始终显示“ B”。 原因是类A和类B都覆盖了toString()方法,在运行时将确定实际对象类型,并调用该类型/类的toString()方法。 因此,在您的示例中:您创建了一个B的实例,因此实际对象类型为B! 然后您向上转换为A,因此引用类型现在为A,但是引用的“真实”对象类型将保持为B!

https://www.programcreek.com/2009/02/overriding-and-overloading-in-java-with-examples/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM