Почему вы создаете отдельный экземпляр Foo? FooWrapper уже является Foo.
class Foo {
protected void method() {}
}
class FooWrapper extends Foo {
protected void method() {
super.method();
}
}
Редактировать : если вам действительно нужен отдельный экземпляр, один из способов (хотя и немного уродливый) - использовать отражение:
public class Foo {
protected void method() {
System.out.println("In Foo.method()");
}
}
public class FooWrapper extends Foo {
private Foo foo;
public FooWrapper(Foo foo) {
this.foo = foo;
}
public void method() {
try {
Method m = foo.getClass().getDeclaredMethod("method", null);
m.setAccessible(true);
m.invoke(foo, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Edit2: Исходя из вашего комментария ниже, есть два подкласса Foo, один из которых просто предоставляет открытые версии защищенных методов, а другой переопределяет все важные методы. Первый будет выглядеть и действовать точно так же, как Foo, второй может делать все, что вам нужно:
public class Foo {
protected void method() {
System.out.println("In Foo.method()");
}
}
public class DelegateFoo extends Foo {
public void method() {
super.method();
}
}
public class FooWrapper extends Foo {
private DelegateFoo foo;
public FooWrapper(DelegateFoo foo) {
this.foo = foo;
}
public void method() {
foo.method();
/* extra logic here */
}
}