同じ抽象オブジェクトから拡張されたさまざまなオブジェクトを単一のコンテナーに格納し、それらのオブジェクトのすべてのカスタム フィールドにアクセスできるようにすることは可能ですか? 例を挙げましょう。フォードとホンダの 2 台の車があるとします。すべての車には重量と色があるため、次の抽象クラスを作成できます。
public abstract class Car{
private double weight;
private String color;
public Car(){
this.weight=0;
this.color="";
}
...getters and
...setters
}
ここで、Ford クラスに追加フィールド ' radio ' があり、次のようになっているとします。
public Ford extends Car(){
private String radio;
public Ford(){
super();
this.radio = "generic";
}
}
同様に、Honda クラスにはカスタム フィールド ' camera 'があります。
public Honda extends Car(){
private String camera;
public Honda(){
super();
this.camera= "analog";
}
}
以下のように、これらのクラスのインスタンスを単一のコンテナーに保持することは可能ですか。以下のコードは機能しますが、これは私が望むものではないことに注意してください。以下のコメントを参照してください。
Ford ford = new Ford();
Honda honda = new Honda();
ArrayList<Car> myCars = new ArrayList<Car>();
myCars.add(ford);
myCars.add(honda);
ここに私の問題があります:
私myCars.get(0)
がクラスのオブジェクトを取得するCar
と(明らかに)、カスタムフィールドradioを取得できません。もちろん、私は次のようなことを行うことができ、無線((Ford) myCars.get(0))
フィールドを見ることができますが、ダウンキャストなどを行わずにすべてのフィールドを明らかにするより良いコンテナを作成することは可能ですか:
- Fordクラスを返し、私はweight、color、radioへのアクセス - Hondaクラスが返され、 weight、color、およびcameraにアクセスできるようになります。 myContainer.get(0)
myContainer.get(1)
私の勘では、解決策は近いし、それも可能ですが、私の Java の専門知識はまだそこまで達していません。たぶん、ある種のジェネリックまたはハッシュマップに関係しているでしょうか??
君たちありがとう!!