2017-05-29 12 views
-1

私はいくつかのフィールドに "保護された"スコープを持つジェネリッククラスを持っています。継承されたクラスでこのスコープをオーバーライドすることも可能ですか?ここに私のジェネリック(拡張)クラスの例です:だから継承されたクラスのフィールドのスコープを「オーバーライドする方法」?

public abstract class BaseDAO<T extends Entity> { 

protected MongoClient client; 
protected MongoCursor<Document> cursor; } 

私の継承クラスでは「プライベート」に「保護」に変更し、どのように、最も具体的にあれば、?

Googleは自分のリクエストを理解しておらず、最も基本的な継承に関するチュートリアルを提供していますが、これは私の質問に答えられません。ここでもいくつかのタグで "Javaスコープオーバーライド"と何かを検索しようとしました。うまくいきませんでした。

フィードバックありがとうございます!

+1

できません....それはそれほど簡単です。 – Stultuske

+1

サブクラスのフィールドを再宣言すると、オーバーライドではなく非表示になります(https://stackoverflow.com/questions/9414990/if-you-overwrite-a-field-in-a-subclass-of-aを参照)。 -class-the-subclass-has-two-fields-w)を使用します。メソッドの観点からは、可視性を高める(例えば、公開から保護)だけでなく、減少させない(プライベートから保護)ことができます。 –

+0

はい、私はsuper.fieldNameとちょうどfieldNameがdifferend変数であることを知っています。とにかく私の質問に答えた、ありがとう! –

答えて

-1

継承されたクラスがフィールドを「隠す」(継承したクラスをBaseDAOとシームレスにスワップすることはできない)ため、これは不可能でLiskov substitution principleを尊重しません。

+0

したがって、継承者にプライベートフィールドを作成する唯一の方法は、このフィールドを継承することではありません。 –

+0

あなたがここで何を意味するか分かりません。あなたのサブクラスは常に親フィールドを継承しますが、それについて何もできません。しかし、あなたは間違いなくあなたのサブクラスにプライベートフィールドを追加することができます。 – jdebon

+0

ええ、それは私が尋ねたものです。ありがとう! –

-1

あなたはすでに正しい回答を受けています。可視性を下げることはできません。 (@ d.j.brownのように)

親メソッドをオーバーライドして可視性をpublicに増やすことはできますが、privateに減らすことはできません。

関連する問題