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