你为什么要构建一个单独的 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 */
}
}