Java 从父类存储/获取子类

Java 从父类存储/获取子类,java,arraylist,Java,Arraylist,我有两门课,书籍和杂志,它们都扩展了参考课。 我最初将它们存储到单独的ArrayList中,但现在需要将它们全部存储到引用ArrayList中 我使用原来的2个ArrayList来存储用户引用,然后当他们搜索它时,它会搜索两个数组来找到它 我的问题是如何使用book和journal类中的函数?或重写的函数。在迭代列表时,您可以检查它是书籍还是日志,然后调用特定于书籍和日志的方法: for (Reference ref : list) { if (ref instanceof Book)

我有两门课,书籍和杂志,它们都扩展了参考课。 我最初将它们存储到单独的ArrayList中,但现在需要将它们全部存储到引用ArrayList中

我使用原来的2个ArrayList来存储用户引用,然后当他们搜索它时,它会搜索两个数组来找到它


我的问题是如何使用book和journal类中的函数?或重写的函数。

在迭代
列表时,您可以检查它是
书籍
还是
日志
,然后调用特定于
书籍
日志
的方法:

for (Reference ref : list) {
    if (ref instanceof Book) {
        ((Book) ref).bookMethod();
    } else if (ref instanceof Journal) {
        ((Journal) ref).journalMethod();
    }
}
如果从
Reference
调用方法,则不需要使用
instanceof
或强制转换到
Book/Journal
,这些方法可能会被覆盖,也可能不会被覆盖:

for (Reference ref : list) {
   ref.doSomething();
}

如果
Book
Journal
都覆盖
doSomething()
,则它将执行
Book/Journal
特定实现,否则它将使用
Reference
实现。

如果
Book
Journal
对象都扩展了
Reference
,则应该能够将它们存储在
列表中。如果它们都重写了
Reference
中的函数,您可以在其中任何一个上调用这些方法,它将为每个方法调用重写的方法。如果您想专门使用
Book
Journal
中的函数,则必须对其进行适当的强制转换。@JackmeriusTacktheritrix但Book具有特定的字符串,这些字符串对于它的类是唯一的,Journal也是唯一的,因此这些字符串最初是否会保留在列表中?它们仍然会“保留”。如果您发布一些您关心访问的代码,可能会有所帮助。