3

Core Java API の多くのクラスは final です (Wrapper クラス、String、Math)。なぜそうなのですか?

4

2 に答える 2

6

これらはセキュリティ上の理由から最終的なものです。他の理由もあるかもしれませんが、セキュリティが最も重要です。

java.lang.Stringを継承し、独自の変更可能な実装をセキュリティに敏感な API に提供する機能を想像してみてください。API は文字列を取得する以外に選択肢はありませんが (置換の原則を思い出してください)、文字列を変更することができます (同時スレッド上または API が返された後)。有効。

プリミティブのラッパーにも同じことが言えます。これらのクラスを使用して API でエンコードされた動作に関する重要な仮定に違反するため、どのような状況でも変更可能であることは望ましくありません。

最終的な作成Stringは、他の人が独自の、潜在的に敵対的なクラスの実装を提供しないようにすることで、この問題に対処しますString

于 2012-05-01T18:34:18.110 に答える
1

他のプログラマーがサブクラスを作成したり、特定のメソッドをオーバーライドしたりできないようにしたい場合があります。このような状況では、finalキーワードを使用します。

String クラスは不変であることを意図しています。文字列オブジェクトは、どのメソッドによっても変更できません。Java はこれを強制しないため、クラスの設計者が強制しました。String のサブクラスを作成することはできません。

これがあなたの質問に答えることを願っています。

于 2012-05-01T18:33:47.950 に答える