Допустим, есть класс:
abstract class A {
    public abstract void foo(int i);
    public abstract void bar();
}
class B extends A {
    @Override
    public void foo(int i) { ... }
    
    @Override
    public void bar() { ... }
}
Я хочу запилить свой класс:
class C extends A {
    private final B b;
    C(B b) {
        this.b = b;
    }
    @Override
    public void foo(int i) {
        b.foo(i * 2);
    }
    @Override
    public void bar() {
        b.bar();
    }
}
То есть он по сути дела является обёрткой над классом B, которая модифицирует поведение одного из методов (точнее выполняет некоторую предобработку аргументов), а все остальные просто проксирует без изменений.
Разумеется, в реальности методов у класса B не 2, а больше.
Я хочу создать объект-прокси полностью в рантайме (с помощью, например, javassist). Более того, я даже знать не хочу, какие конкретно методы есть у класса A кроме того, в который я хочу влезть, но они должны правильно отпроксироваться.
Как такое запилить?
P. S.: Я понимаю, что полученный класс не будет полной заменой класса B, но мне это и не нужно - всё равно весь код работает с ним только как с классом A.


