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