java使用反射调用超类方法
我有两门课,比如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
我做错了什么
# 1 楼答案
您想要调用的方法(public、private等)的可见性如何。 如果想查看无法直接调用的方法,应该使用getDeclaredMethod()
还有,你的类的构造函数是什么样的?InstanceionException表示您在获取类A(或B)的实例时遇到问题
我有以下代码,它可以工作:
A.java
B.java
# 2 楼答案
试试这个:
区别在于使用^{} 而不是^{} ,后者只获取
public
、protected
、package/default和private
可见性的方法