Java Reflection:从子类调用继承的方法

时间:2017-03-20 10:40:07

标签: java inheritance reflection nosuchmethoderror

在我的申请中,我有以下结构:

public class ParentClass{
    public void method1()
    {....}

    public void method2()
    {....}

    public void method3()
    {....}

    public void method4()
    {....}

    public void method5()
    {....}
}

public class ChildClass extends ParentClass{
    public void method3()
    {....}

    public void method4()
    {....}
}


//I have exported the above class in a jar file.
//--------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---------------------------

public class TestClass{
     public static void main(String args[]) {
        String jarpath = "jar path of the above class"
        File jarFile = new File(jarpath);
        URLClassLoader classLoader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()},Thread.currentThread().getContextClassLoader());
        Class<?> dynamicClass = (Class<?>) classLoader.loadClass("packageName.ChildClass");
        Constructor<?> cons = dynamicClass.getConstructor();
        classObject = cons.newInstance();
        Method method = obj2.getClass().getDeclaredMethod("method1",null);
        method.invoke(obj2);
     }
}

在上述调用中,当我从method1的对象调用ChildClass时,它会抛出java.lang.NoSuchMethodException

在实际场景中ParentClass有数百个方法与主存储库一样工作,对于每个客户端,我们创建单独的ChildClass并覆盖客户端特定更改的方法。

有没有办法从子类对象调用父类的方法(没有被覆盖)?

2 个答案:

答案 0 :(得分:6)

您需要使用getMethod(String name, Class<?>... parameterTypes)代替getDeclaredMethod

答案 1 :(得分:0)

如果继承的函数是private,则可以使用:

clazz.getSuperclass().getDeclaredMethod(String name, Class<?>... parameterTypes);