2017-10-08 14 views
1

サブクラスがクラス属性をオーバーライド/再宣言できないようにすることはできますが、それでもそれを読み取らせることはできますか?&?属性の読み取り/書き込みは可能ですが、上書き/再書き込みはできません。

class Human 
{ 
    public boolean isMale; 
    ... 
} 

class Asian extends Human 
{ 
    public void livingLife() 
    { 
     // this is OK 
     (isMale) ? doSomething() : doSomethingElse(); 

     // this is OK 
     isMale = false; 
    } 

    // redeclaration is not OK 
    public boolean isMale; 
} 
+1

なぜ再宣言は大丈夫ですか? – 4castle

答えて

1

アクセシビリティを非公開にしてください。

class Human 
{ 
    private boolean isMale; 

    public boolean isMale() { 
     return isMale; 
    } 

    public void setIsMale(boolean isMale) { 
     this.isMale = isMale; 
    } 
} 

再宣言を避けることはできません。

+0

注釈もありませんか?変数名の再宣言を防ぐ必要があることに注意してください。プライベートdoesntこれを行う(たぶん@DoesNotOverrideのような?) – AlanSTACK

+1

@Alanフィールドは、サブクラスによってオーバーライドすることはできません。サブクラスができる最悪のことは、同じ名前の新しいフィールドを宣言することですが、別のスコープを持つことになります。 – 4castle

+0

@ 4castleちょっと4castle、私はルールや何かを壊そうとしていない。私はベストプラクティスとOOPプログラミングを知っています。私はこれを行うことが可能かどうかを質問するだけで、同じ結果を達成するためにデコレータを作成しない場合は、 – AlanSTACK

関連する問題