クラスからの条件に基づいて子クラスを含むコンストラクタの作成をオーバーライドするシナリオがあります。リフレクションを使用して基本クラスのコンストラクタでスーパークラスのコンストラクタをオーバーライドします
だから、クラス、次のとおりです 1)その他の参考 2)(基底クラス) 3)OtherImpl(他の子クラス) 4)RefWorking(メインクラス)
クラスRefがのコンストラクタを呼び出しています他のクラス、OtherImplのコンストラクタでこのコンストラクタをオーバーライドしたいと思います。
class Ref {
private String s = "Original";
private Other o;
public Ref() {
}
public void method1(int a) {
o = new Other();
System.out.println("Method 1 : "+ s);
}
private void method2(String a) {
System.out.println("Method 2 : "+ a);
}
}
class Other {
public Other() {
System.out.println("Default Other Constructor");
}
}
class OtherImpl extends Other {
public OtherImpl() {
System.out.println("Reflection Constructor");
}
}
public class RefWorking {
public static void main(String args[]) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
Ref r = new Ref();
Class c = r.getClass();
OtherImpl oi = new OtherImpl();
Field f = c.getDeclaredField("o");
f.setAccessible(true);
f.set(r, oi);
r.method1(10);
}
}
それは次のような出力を与えている:
デフォルト備考コンストラクタ 反射コンストラクタ デフォルト備考コンストラクタ 方法1:オリジナル
しかし、私の予想される出力は次のようになります。 デフォルト備考コンストラクタ 反射コンストラクタ デフォルトのその他のコンストラクタ リフレクションコンストラクタ 方法1:オリジナル