Foo の別のインスタンスを作成するのはなぜですか? FooWrapper は既に Foo です。
class Foo {
protected void method() {}
}
class FooWrapper extends Foo {
protected void method() {
super.method();
}
}
編集:本当に別のインスタンスが必要な場合、1つの方法(少し醜いですが)はリフレクションを使用することです:
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 の 2 つのサブクラスを用意します。1 つは保護されたメソッドのパブリック バージョンを提供するだけで、もう 1 つはすべての重要なメソッドをオーバーライドします。1 つ目は Foo とまったく同じように見え、動作します。2 つ目は必要なことを何でも実行できます。
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 */
}
}