答えて
フィールドは実装の詳細です。フィールドは実際にはAPIの一部と見なされるべきではありません。後で物事がどのように格納されるかを正確に変えることができます。フィールドを保護されたものにすると、サブクラスではなく、サブクラスが利用できるAPIのみを参照できるようになります。
後でそのフィールドで有効な値を制限したい場合はどうすればよいですか?保護されている場合、あなたは何らかのバリデーションやそれに類するものを取得しません。サブクラスは古いゴミをそこに置くことができます。非公開にして保護されたセッターメソッドを与える場合は、適切な検証を適用できます。
簡潔に言えば、あなたのクライアントからサブクラスへのクライアントの関心は、あなたのクライアントからの呼び出しとほとんど同じです。 APIを用意して、実装の詳細を非公開にしてください。
ほとんどの場合、継承を作成するときは、すべての変数がプライベートであることを確認します。継承されたクラスがスーパークラスから何かを取得したいときはいつでも、getterメソッドで値を取得できます。
誰もがハードコアで変数を取得して設定できる場合、その変数を設定するときに実行する必要がある余分なコードに依存する方法はありません。スーパークラスは自分の責任を譲り渡しています。
私はあなたがそれを「ハードコアの方法」と置くのが好きです...:P –
それは継承の概念です。クラスAがクラスBから継承する場合、保護された変数と関数にアクセスできます。したがって、他のクラスにアクセスしたくない場合は、プライベートとして宣言してください。
- 1. 継承された後の保護されたメンバの動作。
- 2. 保護された変数は継承されたクラスでプライベートになりますか?
- 3. 保護されたフィールドの微妙なC++継承エラー
- 4. 公開されていない、または保護されていないとして宣言された変数は何ですか?
- 5. 保護された継承が必要なケース
- 6. UserControlインスタンシエーションで宣言された値を継承する
- 7. 宣言されていない変数
- 8. 複数のconstを1つの変数宣言に入れてください
- 9. ループ内で宣言された変数
- 10. 異なるパッケージのクラスによるパッケージ保護されたメソッドの継承
- 11. OOD - 現在のクラスで宣言されているプロパティが継承されいるかを調べるた対
- 12. OSXエクスポートされた環境変数が子プロセスで継承されない
- 13. 名前空間で宣言された静的const変数を参照してください
- 14. 宣言された変数がデバッガのローカルに表示されない
- 15. ActivityNotFoundExceptionただし、マニフェストで既に宣言されている
- 16. ビジュアルプロパティが変更された後、継承されたコントロールがリフレッシュされない
- 17. if文で宣言された変数の使い方は?
- 18. 保護された静的メンバー変数
- 19. バックボタンを停止して保護されたページを公開しないでください。
- 20. WinForms継承されたフォームが親の変数を参照できない
- 21. Javascript変数のスコープ内で宣言されていない
- 22. 保護されたクラスが使用されていないコンパイル時の保護されたエラー[VB.net]
- 23. Pythonで継承されたクラス変数の変更
- 24. これです。対ベース。保護された非仮想メソッドを継承していますか?
- 25. 宣言されていない変数に代入する
- 26. 別のクラスから継承したクラスを模擬してください
- 27. 継承された(分離されていない)スコープを持つディレクティブに変数を渡すAngularjs
- 28. Java:継承と宣言
- 29. ジャスミン+のテストでは、継承されたメソッドは継承されたメソッドが呼び出されていることをジャスミンをテストするために
- 30. なぜ我々のイベントハンドラまたはメンバ変数がasp.netコードビハインドで保護されていると宣言されるべきですか
さらに、外部クライアントからのアクセスを防止する必要がある場合でも、ゲッターとセッターを保護することができますが、子にアクセスできるようにすることに注意してください。 – IanGilham
ありがとうジョン、私はメッセージを取得します。 –