![](/img/trans.png)
[英]How to get list of children objects from a list of parent objects in java
[英]Java List how to set and get children objects of a list of type parent
如果我有一个父对象的链接列表,如:
LinkedList<ParentClass> list = new LinkedList<ParentClass>();
我想用不同类型的子对象(所有扩展为“ParentClass”)来填充它们,我将如何进行此操作。 另请注意,我不知道将使用哪个特定的子类。 例如,我可以尝试:
list.add(someInstanceOfAChildClass);
然后能够访问该子类中的方法和属性。 如果我没有明白我的意思,我可以澄清一下。 提前致谢!
使用不同的Child
对象填充List<Parent>
没有问题,但是您无法直接访问Child
的方法和属性。 如果您尝试将List
成员分配给Child
类型的引用,则会出现Type Mismatch错误。
为了解决这个问题,您可以键入投用返回的对象List
明确。
Child iThinkItsChild = (Child) listOfParents.get(indexOfChild);
但是,要安全地执行它,您应该首先使用instanceof
运算符。
Parent parent = listOfParents.get(indexOfChild);
if (parent instanceof Child) {
Child imSureItsChildNow = (Child) parent;
imSureItsChildNow.childMethod();
}
您只需添加子类元素。 当它们扩展ParentClass时,它们可以添加到任何包含ParentClass类型的集合中。
你在谈论多态性。 如果你有 :
public class A extends ParentClass {...}
public class B extends ParentClass {...}
您只需要将A
和B
实例添加到列表中,例如
list.add(new A()); // add a A
list.add(new A()); // add another A
list.add(new B()); // add a B
然后,如果你想在列表的所有元素上做一些事情,例如
for (ParentClass foo : list) {
foo.doSomething();
}
方法doSomething()
需要使用实现定义,或者在ParentClass
声明为abstract
,并且可以在A
和B
重写以反映每个类中的特定行为。 如果需要访问某些属性,则需要public
并在ParentClass
声明。 注意:这是一种很好的做法, 不要将属性设置为public
除非它们是一些常量( final
)。 标准方法是提供一个吸气剂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.