コンパイル時にクラスを拡張する機能がありますが、すでにインスタンス化されたスーパークラスのインスタンスを使用して実行時にこのサブクラスのインスタンスを作成できる必要があります。Java:ランタイムでクラスを拡張する
これは、スーパークラスのコンストラクタがサブクラスのコンストラクタの前にすでに呼び出されているため、これは理論上可能です。
インスタンス化をサブクラスに変更したり、元のインスタンス化を中断したりするのに十分なほどプログラムにアクセスできません。
使用例:クラスXのインスタンスの既存の配列があります。後でコードが読み込まれます。インスタンスXのうちの1つのメソッドを、ロードされたサブクラスYがXを拡張するようにオーバーライドする必要があります。親プログラムはその配列を介してのみオブジェクトにアクセスするため、その配列要素をYインスタンスに置き換えます。あたかも元々その配列にインスタンス化されているかのように振る舞います。私は、スーパークラスのインスタンスとフォワードコールを囲むだけではいけません。スーパークラスを再インスタンス化するのは困難な複雑さがあります。
もっと明確になることを願っています。
質問に言い換えてください。 –
あなたは実際に達成しようとしているものの例を提供することはできますか?代わりにあなたの望む、しかし不可能な、そうする方法。 – millimoose
既存の行を「public static Foo foo = new Foo();」とします。私は変更することはできません。私は "public class Bar extends Foo"を持っていて、最初の行が "public static Foo foo = new Bar()"のように "foo = new Bar(...)"を実行したいと思います。 – JAKJ