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