我可以在 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
。所以编译器不允许你把其中的元素当作Child
ren,尽管它在运行时可能是Child
。所以如果你确定Parent
对象也是一个Child
,你可以通过Child child = (Child) object;
向下转型。然后你可以在编译时把它当作一个Child
。但注意向下转换不是类型安全的,它可能会抛出运行时异常。
我有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
。所以编译器不允许你把其中的元素当作Child
ren,尽管它在运行时可能是Child
。所以如果你确定Parent
对象也是一个Child
,你可以通过Child child = (Child) object;
向下转型。然后你可以在编译时把它当作一个Child
。但注意向下转换不是类型安全的,它可能会抛出运行时异常。