从抽象类层次结构中获取正确的字段?

时间:2013-05-14 22:15:50

标签: java arraylist abstract-class field hierarchy

我有一个抽象类A

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?

在我的真实程序中,我有一个A对象的ArrayList

ArrayList<A> list;

我打来电话:

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

我会得到A的x或B吗?

1 个答案:

答案 0 :(得分:1)

如果你不在扩展类上覆盖getX(),你将从A获得x。

如果覆盖getX(),您将获得覆盖方法返回的值。

示例:

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

以上所有行都将返回在B类上覆盖的getX()值。

如果在B类上没有覆盖此方法,那么您将获得在A类上定义的值。