从各种模式的角度来看,可以接受从其后代更改超类中的字段。例如:
class A {
int barA;
}
class B extends A {
private void testMethod() {
barA = 4;
}
}
提前致谢!
答案 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
。