現在のクラスを拡張するすべてのクラスで変数を表示したい場合に使用する必要があることは理解してprotected
いますが、それは正確にはどういう意味ですか? 最も一般的な使用例は何ですか?
質問を組み立てる別の方法は、クラス変数をクラスの子から見えるようにしたいが、外部クラスからは見えないようにしたいときの重要なケースは何ですか。
現在のクラスを拡張するすべてのクラスで変数を表示したい場合に使用する必要があることは理解してprotected
いますが、それは正確にはどういう意味ですか? 最も一般的な使用例は何ですか?
質問を組み立てる別の方法は、クラス変数をクラスの子から見えるようにしたいが、外部クラスからは見えないようにしたいときの重要なケースは何ですか。
私が遭遇した「保護された」アクセス修飾子の使用例のほとんどは、「テンプレート メソッド」パターンのインスタンス化です。
このパターンでは、アルゴリズムの詳細がサブクラスに委譲されます。
実際、保護されたアクセスは、クラスの不変条件に穴を作成します。サブクラスは、不変条件が保持されなくなるような方法でメンバーを悪用する可能性があります。
ほとんどの場合、保護されたアクセスよりも優れた設計の選択肢があり、依存関係の逆転が最初に思い浮かびます。
私のアドバイス?オブジェクトの内部を信頼できない人に公開しないでください。「保護」は注意して使用してください。
保護された変数は、get / set 制約を経由せずに基本クラスの変数に効果的にアクセスするのに役立ちます。
保護された変数の有用性は、他のアプリケーションで機能することになっているライブラリの開発において重要です。これにより、変数を公開せずにlibの環境で自由に使用でき、継承されたクラスをファイナライズすると、それらは環境外に禁止されます。