1

私の友人は、Java で静的変数をオーバーライドできるかどうか私に尋ねました。私は、彼がそのような奇妙なコーディング方法について考えたことにショックを受けました。それから彼は、これは PHP で可能であると説明してくれました。私は、優れた開発者がそうするべき正当な理由があるかどうかを知りたいと思っています。私の意見では、静的メンバーはクラス メンバーとして特徴付けられ、オブジェクトとは関係がないため、クラスの派生とは関係ありませんが、彼は素朴で頑固なので、彼を納得させることはできません。

誰かがこの全体に対して良い議論をすることができますか、またはこれがクールな機能であることを私に納得させることができますか?

4

2 に答える 2

1

静的継承は意味がありません。それが不可能だということではなく、それから何の利益も得られないというだけです。

通常の継承では、同じものに対して異なる実装を持ち、どの実装が使用されるかを知らず、気にしないという利点があります。静的継承では、操作するオブジェクトがなく、クラス名を使用しているため、ポリモーフィズムを利用できません。

たとえば、 Child.someMethod() を呼び出している場合、子の実装に縛られており、実際に親だけが必要な場合は、代わりに Parent.someMethod() を実行できます。Parent 実装に何かを追加する必要がある場合は、親を呼び出してから他のことを行う Child.someOtherMethod() を作成するだけです。静的継承は単なる構文糖衣です...

于 2011-11-05T23:48:05.913 に答える
0

私の知る限り、Java の static キーワードは Class 変数の定義に使用されます。クラス変数は、そのクラスのすべてのオブジェクトに対して 1 つのインスタンスを持ちます。したがって、Java では静的変数をオーバーライドすることはできません。意味がありません。あるクラスの静的変数に加えられた変更は、別のクラスに伝達されます。これは、JAVA で static が使用されるものです。

これは、PHP で動作するのと同じ方法です (私は実際には PHP の専門家ではありません)。ただし、PHP の静的変数がオーバーライドされ、その変数が別のクラスとは異なる値を持っていることを示すコードを友人が提供できる場合は、私はそうします。とても喜んでください。

于 2011-11-05T22:01:59.023 に答える