0

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

class A {
    int barA;
}

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

提前致谢!

4

5 回答 5

4

如果您想在子类中更改它们的值,通常最好将所有字段设为私有,并提供公共或受保护的设置器。

于 2013-10-29T12:50:18.210 回答
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);
    }
} 
于 2013-10-29T12:50:35.317 回答
2

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

于 2013-10-29T12:50:26.983 回答
1

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

于 2013-10-29T12:51:16.967 回答
0

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

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

于 2013-10-29T12:50:34.430 回答