2013-05-14 55 views
0

我有一個抽象類甲從抽象類層次結構中獲取正確的字段?

public abstract class A{ 
    private int x; 
    public void doSomethingToX{...}; 
    public int getX(){ 
    return x; 
    } 

我有7類,延伸A,每個7的以相同的方式實現doSomethingToX,所以在類A.如果類B擴展A中定義它,我調用B.doSomethingToX(),然後我調用B.getX(),我會得到B的X值還是會得到A的?

在我實際的程序我有一個的ArrayList對象

ArrayList<A> list; 

我打電話:

list.add(new B()); 
    list.get(index).doSomethingToX(); 
    list.get(index).getX(); 

我會得到的x或B的?

回答

1

如果不重寫的getX()的擴展類,你會得到從x A.

如果重寫的getX(),您將獲得價值上覆蓋方法返回。

例如:

A a = new B(); a.getX(); 
B b = new B(); b.getX(); 

所有上述線將返回的getX(的值)上覆蓋類B.

如果此方法未在B類,那麼你將得到的值定義重寫在類A.

+0

所以我必須爲每個類寫getX()?有沒有辦法我只能寫一次? –

+0

如果你不覆蓋類B的getX(),那麼你將得到在A類的getX()上定義的值。 –

+0

好的,謝謝。既然你先回答,我會給你答案 –