[英]Invoke an overridden instance method using reflection in java
我想这样做: 使用反射调用重写的基本方法,但是
我有:
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可用于调用超类方法:
您的挑战(我希望((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.