0

ClassA2人の子供がいます: ClassBClassC

のメソッドをオーバーライドする必要がありますが、 andClassAを使用ClassBしますClassC(変更されたメソッドを使用)。

ClassAClassBおよびClassCはすべて外部ライブラリの一部であり、変更することはできません。

ClassBサブクラス化せずClassCに、各サブクラスでメソッドの同じ再実装を個別に使用して、これを実行することは可能ですか?

ClassB無視したいメソッドの再実装がすでにある場合、問題は異なりますか?

4

2 に答える 2

1

どういうわけかこれを可能にする特別なメカニズムが機能していない限り、それは不可能です。ClassBまた、独自のオーバーライドされた実装があったとしても、違いはありません。

ClassBClassCはすでにコンパイルされているので、それらのメソッドの実装はすでに外部ライブラリに組み込まれています。一般に、独自の派生クラスがない限り、これを変更するためにソースコードレベルでできることは何もありません。

呼び出しターゲットを動的に変更できるランタイムを備えたマネージド言語について話している場合、またはマシンコードをその場で書き換えることができるホットパッチメカニズムが機能している場合は、解決策があるかもしれませんが、それは特別な例外であり、規則ではありません。

于 2013-03-17T21:18:24.603 に答える
0

それは言語にもよるが、せいぜいハックのように聞こえる。これをJavascriptで記述している場合は、クラスBおよびCのプロトタイプ関数を直接変更できます。

しかし、ほとんどのCファミリーの言語では、これは不可能だと思います。多重継承はあいまいさをもたらす可能性があるため(BとCにはそれぞれ独自のサブクラスがあると思います)、おそらくそれぞれをサブクラス化する必要があります。

于 2013-03-17T21:26:26.073 に答える