0

我有一个抽象类 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 的?

4

1 回答 1

1

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

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

例子:

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

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

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

于 2013-05-14T22:21:55.803 回答