[英]Invoke Super class methods using Reflection
我有2节课,比如A&B:
Class A extends B {
public void subClassMthd(){
System.out.println("Hello");
}
}
Class B {
public void printHelloWorld {
System.out.println("Hello");
}
}
现在,我使用反射来调用类A上的方法。我还想调用类B中的printHelloWorld方法。
我试过用
Class clazz = Class.forName("com.test.ClassA");
Object classAInstance= clazz.newInstance();
Method superClassmthd = classAInstance.getClass()
.getSuperclass().getMethod("printHelloWorld", null);
superClassmthd.invoke(classAInstance);
也尝试过
Class clazz = Class.forName("com.test.ClassA");
Object classAInstance= clazz.newInstance();
Class superClazz = Class.forName(classAInstance.getClass().getSuperclass().getName());
Object superclassInstance = superClazz.newInstance();
Method superClassmthd = superclassInstance.getMethod("printHelloWorld", null);
superClassmthd.invoke(superclassInstance );
但它们都不起作用; 他们抛出一个InstantiationException 。
我在这做错了什么?
试试这个:
Method mthd = classAInstance.getClass().getSuperclass().getDeclaredMethod("XYZ");
mthd.invoke(classAInstance)
区别在于使用getDeclaredMethod()
,它获取所有可见性的方法( public
, protected
,package / default和private
),而不是getMethod()
,它只获取具有public
可见性的方法。
您要调用的方法的可见性是什么(公共,私有等)。 如果要查看无法直接调用的方法,则应使用getDeclaredMethod()。
另外,你的类的构造函数是什么样的? InstantiationException表示您在获取A类(或B)实例时遇到问题。
我有以下代码,它的工作原理:
A.java
import java.lang.reflect.Method;
public class A extends B {
public static void main(String[] args) throws Exception {
A classAInstance = new A();
Method mthd = classAInstance.getClass().getSuperclass().getMethod("XYZ", null);
mthd.invoke(classAInstance);
}
}
B.java
public class B {
public void XYZ() {
System.out.println("done");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.