繁体   English   中英

使用Reflection调用超类方法

[英]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() ,它获取所有可见性的方法( publicprotected ,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.

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