1

多くの状況で役立つ Vector3i クラスがありますが、バグを防ぐために型システムを使用するように拡張していることに気付きました。

たとえば、世界のオブジェクトにローカルな「自我中心」の vector3i と、世界座標の vector3i があるとします。

この 2 つは変換なしでは当然互換性がなく、互いに意味がありません。

True Hungarian Notationを使用するのは良い状況ですが、代わりにクラスを拡張し、新しい機能を追加していません。

JVM/Hotspots の最適化を考慮すると、パフォーマンスが低下しますか?

4

1 に答える 1

2

継承は強力なツールですが、その力には代償が伴います。継承には多くの落とし穴や問題があります。特に、カプセル化を壊し、注意して実装しないと壊れやすいコードになる可能性があります。

Java の継承メカニズムは、15 年以上にわたって継続的に開発されてきました。高速で効率的であることを信頼できます。データ モデルで継承が必要な場合、継承を渡す重大なパフォーマンス関連の理由はありません。

あなたの場合、継承ではなく構成によって機能を表す方が理にかなっている場合があります (つまり、ClassB で ClassA を拡張する代わりに、ClassA を ClassB 内のインスタンス フィールドにしてから、メソッド呼び出しをカプセル化されたオブジェクトに委任します)。少なくともそれを考慮する必要があります。継承と比較して、コンポジションはより堅牢で壊れにくいコードになります。

于 2015-05-16T05:27:21.333 に答える