我可以在java中列出2个继承类型的类吗?

时间:2016-01-03 03:42:13

标签: java inheritance arraylist parent-child

我有类Parent和子类Child。我想创建一个ArrayList,我可以存储这两个类的对象。 有可能吗?

我试过以下:

solr.cmd

到目前为止,编译器没有给我任何错误,所以我想它没问题。但是当我尝试在我从ArrayList获得的对象上使用Child的方法时,我无法使用它! 而

bin\solr.cmd start

这给我一个错误,方法countNumbers在Child.I非常困惑,谢谢你提前!

2 个答案:

答案 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
}