0
java.util.ArrayList<car> cList = new java.util.ArrayList<Car>();

car[] cArray = new car[20];

Car クラスを拡張する Toyota クラスがあるとします。Car クラスには、Toyota クラスでオーバーライドされる print メソッドがあります。

Toyota オブジェクトを作成して cArray に配置すると、それらは Car オブジェクトになります。print(Toyota t)関数を呼び出したい場合は、次のように print() メソッド呼び出しでオブジェクトをキャストする必要があります。アップキャストかダウンキャストか?)

cArray の最初の 10 個のインデックスに Toyota オブジェクトがあると仮定します。

Toyota toy = (Toyota)cArray[0];
toy.print(toy); //this should call the Toyota's print method

ArrayList を使用した場合、これは可能でしょうか?

Toyota toy = (Toyota)cList.get(0);
toy.print(toy); //does this call Toyota's print method or car's print method?

最後の注意: これがtoy.print(toy)適切な方法であるかどうかはわかりません。教科書や Javadoc などを読みましたが、以前に使用された object.method(exactSameObject) を見たことがありません。これを呼び出す必要があるメインで使用しますCar.print(toy)が、コンパイラはこれを静的コンテキストから参照できないと述べています。明らかに、私はいくつかの基本的な概念を理解していません。助けてください!

4

3 に答える 3

2
Toyota toy = (Toyota)cArray[0];
toy.print(toy); //this should call the Toyota's print method

確かに、これはトヨタの印刷方式と言えますが、それでよろしいでしょうか。

Toyota で toString() メソッドをオーバーライドすると、次のようになります。

System.out.println( toy );

オーバーライドされたメソッドは次のようになります。

public String toString() {
    return "I'm a Toyota!";
}

現在、キャストは必要ありません。

于 2013-10-18T21:03:22.540 に答える