Я сомневаюсь, что это можно сделать без каких-либо сторонних библиотек.
Существует библиотека cglib, которая способна на такие вещи.
По существу, она создаст подкласс перехваченного класса во время выполнения.Вы сможете "переопределить" методы, реализовав InvocationHandler, который будет действовать как прокси при вызове любого из методов суперкласса.