2013-05-14 57 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

好的,谢谢。既然你先回答,我会给你答案 –