В моем приложении у меня есть следующая структура:
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
есть сотни методов, которые работают как основной репозиторий, и для каждого клиента мы создаем отдельный дочерний класс и переопределяем методы для конкретных изменений клиента.
Есть ли способ вызвать метод (который не переопределяется) родительского класса из объекта дочернего класса?
getDeclaredMethod()
, но вашChildClass
не объявляет метод. ВашParentClass
делает. Вместо этого рассмотрите возможность использованияgetMethod
. - person mcuenez   schedule 20.03.2017