是否可以将已从同一抽象对象扩展而来的不同对象存储在单个容器中,并能够访问这些对象的所有自定义字段。让我举个例子:假设我有两辆车:福特和本田。由于所有汽车都有重量和颜色,我可以制作以下抽象类:
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";
}
}
同样,本田类有一个自定义字段“相机”
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))
并且能够看到无线电场,但是是否有可能创建一个更好的容器来显示所有字段而无需向下转换等,例如:
myContainer.get(0)
- 将返回福特类,我会获得重量、颜色和收音机
myContainer.get(1)
——将返回本田课程,我将获得重量、颜色和相机。
我的直觉告诉我,解决方案就在附近,而且是可能的,但是我在 Java 方面的专业知识还没有达到。也许我必须对某种泛型或哈希图做些什么?
谢谢你们!!