从超类更新字段

时间:2013-10-29 12:46:14

标签: java oop design-patterns anti-patterns

从各种模式的角度来看,可以接受从其后代更改超类中的字段。例如:

class A {
    int barA;
}

class B extends A {
    private void testMethod() {
        barA = 4;
    }
}

提前致谢!

5 个答案:

答案 0 :(得分:4)

通常,最好将所有字段设为私有,如果要在子类中更改其值,则提供公共或受保护的setter。

答案 1 :(得分:3)

不,这通常不是一个好主意。如果我理解你的要求,通常会像

那样完成
public class A{
     private int val;

     protected void setVal(int i){
        val = i;
     }

     public int getVal(){
        return val;
     }
}

public class B extends A{
    public void test(){
        this.setVal(4);
    }
} 

答案 2 :(得分:2)

是的,这很好。如果超类不希望子类修改值,则可以将它们设为私有。

答案 3 :(得分:1)

当我们说B类扩展A时,我们的意思是它继承了它的所有(超类'即A')变量。所以现在B有自己的变量barA。因此,您可以像任何其他成员变量一样更改它。进一步阅读this

答案 4 :(得分:0)

这样做是可以的,但为什么不为此创建getter/setter呢?使用它们而不是直接修改要好得多。

如果您不想在子类中修改值,请将它们设为final