2011-10-27 11 views

答えて

14

フィールドは実装の詳細です。フィールドは実際にはAPIの一部と見なされるべきではありません。後で物事がどのように格納されるかを正確に変えることができます。フィールドを保護されたものにすると、サブクラスではなく、サブクラスが利用できるAPIのみを参照できるようになります。

後でそのフィールドで有効な値を制限したい場合はどうすればよいですか?保護されている場合、あなたは何らかのバリデーションやそれに類するものを取得しません。サブクラスは古いゴミをそこに置くことができます。非公開にして保護されたセッターメソッドを与える場合は、適切な検証を適用できます。

簡潔に言えば、あなたのクライアントからサブクラスへのクライアントの関心は、あなたのクライアントからの呼び出しとほとんど同じです。 APIを用意して、実装の詳細を非公開にしてください。

+0

さらに、外部クライアントからのアクセスを防止する必要がある場合でも、ゲッターとセッターを保護することができますが、子にアクセスできるようにすることに注意してください。 – IanGilham

+0

ありがとうジョン、私はメッセージを取得します。 –

3

ほとんどの場合、継承を作成するときは、すべての変数がプライベートであることを確認します。継承されたクラスがスーパークラスから何かを取得したいときはいつでも、getterメソッドで値を取得できます。

誰もがハードコアで変数を取得して設定できる場合、その変数を設定するときに実行する必要がある余分なコードに依存する方法はありません。スーパークラスは自分の責任を譲り渡しています。

+0

私はあなたがそれを「ハードコアの方法」と置くのが好きです...:P –

0

それは継承の概念です。クラスAがクラスBから継承する場合、保護された変数と関数にアクセスできます。したがって、他のクラスにアクセスしたくない場合は、プライベートとして宣言してください。

関連する問題