0

私は抽象クラスAを持っています

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

A を拡張する 7 つのクラスがあり、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 に答える