2013-10-29 95 views
0

從各種模式的角度來看,可以從其後代更改超類中的字段。例如:超類的更新字段

class A { 
    int barA; 
} 

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

在此先感謝!

+1

子類可以訪問所有公共的,受保護的和晦澀的(bakage)實例變量和方法,但它不能訪問私有的。但是,將所有實例變量設置爲私有並通過Accessors和mutators訪問它們是一個好習慣。 – iShaalan

回答

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); 
    } 
} 
4

如果您想要在子類中更改其值,通常會將所有字段設置爲私有,並提供公共或受保護的setter。

2

是的,這很好。如果超類不希望子類修改值,它可以使它們變成私有的。

+1

使他們'最終'=) –

+0

最終將阻止改變值也爲超類:) – Dedyshka

+0

@Dedyshka沒錯! –

0

可以這樣做,但爲什麼你不創建一個getter/setter爲相同?使用這些代替直接修改會更好。

如果您不想在子類中修改值,請將它們設爲final

+0

我想在這種情況下,「私人」就足夠了... – Dedyshka

1

做當我們說類B擴展A,我們的意思是它繼承了其所有(超即A的)變量以及。所以現在B有它自己的變量barA。因此,您可以像其他任何成員變量一樣更改它。進一步閱讀this