Core Java API の多くのクラスは final です (Wrapper クラス、String、Math)。なぜそうなのですか?
2 に答える
これらはセキュリティ上の理由から最終的なものです。他の理由もあるかもしれませんが、セキュリティが最も重要です。
java.lang.String
を継承し、独自の変更可能な実装をセキュリティに敏感な API に提供する機能を想像してみてください。API は文字列を取得する以外に選択肢はありませんが (置換の原則を思い出してください)、文字列を変更することができます (同時スレッド上または API が返された後)。有効。
プリミティブのラッパーにも同じことが言えます。これらのクラスを使用して API でエンコードされた動作に関する重要な仮定に違反するため、どのような状況でも変更可能であることは望ましくありません。
最終的な作成String
は、他の人が独自の、潜在的に敵対的なクラスの実装を提供しないようにすることで、この問題に対処しますString
。
他のプログラマーがサブクラスを作成したり、特定のメソッドをオーバーライドしたりできないようにしたい場合があります。このような状況では、finalキーワードを使用します。
String クラスは不変であることを意図しています。文字列オブジェクトは、どのメソッドによっても変更できません。Java はこれを強制しないため、クラスの設計者が強制しました。String のサブクラスを作成することはできません。
これがあなたの質問に答えることを願っています。