從各種模式的角度來看,可以從其後代更改超類中的字段。例如:超類的更新字段
class A {
int barA;
}
class B extends A {
private void testMethod() {
barA = 4;
}
}
在此先感謝!
從各種模式的角度來看,可以從其後代更改超類中的字段。例如:超類的更新字段
class A {
int barA;
}
class B extends A {
private void testMethod() {
barA = 4;
}
}
在此先感謝!
不,這通常不是一個好主意。如果我理解你的要求,它通常會被像
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);
}
}
如果您想要在子類中更改其值,通常會將所有字段設置爲私有,並提供公共或受保護的setter。
可以這樣做,但爲什麼你不創建一個getter/setter
爲相同?使用這些代替直接修改會更好。
如果您不想在子類中修改值,請將它們設爲final
。
我想在這種情況下,「私人」就足夠了... – Dedyshka
做當我們說類B擴展A,我們的意思是它繼承了其所有(超即A的)變量以及。所以現在B有它自己的變量barA。因此,您可以像其他任何成員變量一樣更改它。進一步閱讀this。
子類可以訪問所有公共的,受保護的和晦澀的(bakage)實例變量和方法,但它不能訪問私有的。但是,將所有實例變量設置爲私有並通過Accessors和mutators訪問它們是一個好習慣。 – iShaalan