我有类Parent和子类Child。我想创建一个ArrayList,我可以存储这两个类的对象。 有可能吗?
我试过以下:
solr.cmd
到目前为止,编译器没有给我任何错误,所以我想它没问题。但是当我尝试在我从ArrayList获得的对象上使用Child的方法时,我无法使用它! 而
bin\solr.cmd start
这给我一个错误,方法countNumbers在Child.I非常困惑,谢谢你提前!
答案 0 :(得分:8)
ArrayList<Parent>
是Parent
的容器,因此您可以在其中放置Parent
的任何对象。 Child
属于Parent
,因此ArrayList<Parent>
可以接收它。
但是,由于您的ArrayList<Parent>
只知道它包含Parent
,因此不知道其中的对象是否为Child
。因此,编译器不允许您将其中的元素视为Child
ren,尽管它在运行时可能是Child
。因此,如果您确定Parent
对象也是Child
,则可以按Child child = (Child) object;
向下转发它。然后,您可以在编译时将其视为Child
。但请注意,向下转换不是类型安全的,它可能会抛出运行时异常。
答案 1 :(得分:6)
您想要声明您的列表:
List<Parent> list = new ArrayList<>();
这将告诉Java您接受任何扩展类或父类。
由于List
将包含Parent
类型,要使用Child
对象,您必须投射它:
Parent o = list.get(x);
if (o instanceof Child) {
Child child = (Child) o;
// Do something with child
}