Невозможно динамически переопределить методы класса, используя чистый Java. Сторонняя библиотека cglib может создавать динамические подклассы.Вы можете проверить это.
Если вы можете кодировать интерфейс, то вы можете использовать динамический прокси Java для создания объекта прокси, который переопределяет поведение, как в примере ниже.Предположим, Game
реализовывал интерфейс IGame
.
class GameInvocationHandler implements InvocationHandler
{
private Game game;
public GameInvocationHandler(Game game)
{
this.game = game;
}
Object invoke(Object proxy, Method method, Object[] args)
{
if (method.toGenericString().contains("act()")
{
//do nothing;
return null;
}
else
{
return method.invoke(game, args);
}
}
}
Class proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), IGame.class);
IGame f = (IGame) proxyClass.getConstructor(InvocationHandler.class).newInstance(new Object[] { });
.