Java列表如何设置和获取父类型列表的子对象

Java列表如何设置和获取父类型列表的子对象,java,inheritance,linked-list,parent-child,Java,Inheritance,Linked List,Parent Child,如果我有一个父对象的链接列表,如: LinkedList<ParentClass> list = new LinkedList<ParentClass>(); 然后能够访问该子类中的方法和属性。 如果我没有理解我的观点,我可以澄清。 提前谢谢 只需添加子类元素。当它们扩展父类时,可以将它们添加到保存父类类型的任何集合。您所说的是多态性。如果您有: public class A extends ParentClass {...} public class B extend

如果我有一个父对象的链接列表,如:

LinkedList<ParentClass> list = new LinkedList<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();
}
然后如果你想在列表的所有元素上做一些事情,例如

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
中声明
抽象
,并且可以在
A
B
中重写,以反映每个类中的特定行为。
如果需要访问某些属性,则它们需要
public
并在
ParentClass
中声明。注意:这是一个很好的实践不要将属性作为
公共属性
,除非它们是一些常量(
final
)。标准方法是提供一个getter。

用不同的
子对象填充
列表
不会有问题,但不能直接访问
子对象的方法和属性。如果尝试将
列表
成员分配给类型为
Child
的引用,则会出现类型不匹配错误

要解决此问题,可以显式地键入由
列表返回的对象

Child iThinkItsChild = (Child) listOfParents.get(indexOfChild);
但是,为了安全地执行此操作,您应该首先使用
instanceof
操作符

Parent parent = listOfParents.get(indexOfChild);
if (parent instanceof Child) {
    Child imSureItsChildNow = (Child) parent;
    imSureItsChildNow.childMethod();
}

那部分似乎起作用了!:)如果我想访问父类中不存在的子类中的方法,那么您需要知道子类实现的是什么类。你可以有一个像if(element instanceof ExpectedClass){ExpectedClass child=(ExpectedClass)element;chil.dosomething();…}这样的代码,到目前为止这是有意义的,现在如果我不知道我将得到什么孩子,而每个chid都有一个方法foo(),那么这是避免强制转换的唯一方法。如果它们从来都不是父对象的实例,那么可以将其声明为抽象对象,也可以将foo方法声明为抽象对象。如果父实例可以存在,但foo方法对它们没有意义,则可以从foo body UnporteOperationException中抛出,但如果列表中包含父对象,则会抛出异常,并停止处理整个列表。@BenHagel这是正确的方法。您可以在父级中提供一个默认的foo(),子级继承该父级,但如果愿意,可以重写该父级。您可以安全地调用parent.foo(),如果存在子对象的foo()将被调用。那是给你的。