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

Can I have a list of 2 inherited types of classes in java?

我有classParent和一个子classChild。我想创建一个 ArrayList,我可以在其中存储这两个 classes 的 objects。 这样的事情可能吗?

我试过以下方法:

ArrayList<Parent> list= new ArrayList<Parent>();
Parent a;
Parent b;
Child c;
list.add(a);
list.add(b);
list.add(c);

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

list.get(2).countNumbers(); 

这让我出错,方法 countNumbers 在 Child.I 中,我很困惑,提前谢谢!

您要声明您的列表:

List<Parent> list = new ArrayList<>();

这将告诉 Java 您接受任何 Class 扩展或成为 Parent。

由于 List 将包含 Parent 类型,要使用 Child object,您必须转换它:

Parent o = list.get(x);
if (o instanceof Child) {
    Child child = (Child) o;
    // Do something with child
}

ArrayList<Parent>Parent 的容器,因此您可以将任何Parent 对象放入其中。一个Child当然是一个Parent,所以ArrayList<Parent>可以收到。

然而,由于你的ArrayList<Parent>只知道它包含Parent,它并不知道其中的对象是否是Child。所以编译器不允许你把其中的元素当作Children,尽管它在运行时可能是Child。所以如果你确定Parent对象也是一个Child,你可以通过Child child = (Child) object;向下转型。然后你可以在编译时把它当作一个Child。但注意向下转换不是类型安全的,它可能会抛出运行时异常。