Возможно ли, чтобы метод, полученный с помощью механизма рефлексии, воспринимался, как переопределённый метод?
Суть вопроса вот в чём: есть класс A
с методом methodA()
и есть класс B
с объектом класса A objectA
и методом methodB()
, который рефлексивно вызывает метод methodA()
. Так вот, возможно ли, чтобы система воспринимала метод methodB()
, как переопределённый метод methodA()
для объекта objectA?
Схематично так:
public class A
{
...
privat void methodA()
{
...
}
...
}
public class B
{
privat A objectA = new A();
...
privat void methodB()
{
try
{
Method method = A.class.getDeclaredMethod("methodA");
method.setAccessible(true);
method.invoke(objectA);
}
catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e)
{
e.printStackTrace();
}
}
...
}
На просторах интернета нашёл во такой пример:
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class MethodOverride {
public static void main(String[] args) throws Exception {
Class<?> clazz = MethodOverride.class;
Method existingMethod = clazz.getDeclaredMethod("existingMethod");
Method overridingMethod = clazz.getDeclaredMethod("overridingMethod");
MethodUtil.overrideMethod(existingMethod, overridingMethod);
existingMethod.invoke(null);
}
private static void existingMethod() {
System.out.println("Existing method invoked!");
}
private static void overridingMethod() {
System.out.println("Overriding method invoked!");
}
}
class MethodUtil {
public static void overrideMethod(Method existingMethod, Method overridingMethod) throws Exception {
existingMethod.setAccessible(true);
Method method = Method.class.getDeclaredMethod("override", Method.class);
method.setAccessible(true);
method.invoke(existingMethod, overridingMethod);
}
}
Но в классе Method нет метода override().