Для назначения у меня есть ArrayList типа «Reference». Ссылка является родительским классом класса «Книга» и класса «Журнал». Если мне разрешено добавлять объекты типа «Книга» и «Журнал» к Arraylist, почему я получаю сообщение об ошибке, если я хочу получить доступ к методам Book and Journal через следующий код?Доступ к методу подкласса из arraylist суперкласса
ArrayList.get([someindex]).someBookorJournalMethod()
Самого ArrayList является родительским классом, и методы, которые я хочу получить доступ, определяются только для каждой книги или любого журнала.
EDIT: Вот код
public class Books extends Reference{
private String Authors;
private String Publishers;
public Books(String CallNum, String Author, String Title, String Publisher, int year,String type)
{
super(CallNum,Title,year,type);
Authors= Author;
Publishers=Publisher;
}
public String getAuthor()
{
return Authors;
}
public class LibrarySearch {
private ArrayList<Reference> Library;
public LibrarySearch()
{
Library = new ArrayList<Reference>(100);
}
public outputLibrary(){
for (int i = 0 ; i < Library.size(); i+++)
{
if (Library.get(i).getType().equals("Book"))
{
System.out.println("Type:book\n" + "Call Number:" + Library.get(i).getCallNumber() +"\n" + "Authors:" + Library.get(i).getAuthors();)
}
}
}
IntelliJ испытывает проблемы с линией Library.get (я) .getAuthors(), потому что это метод специфичны для книг. Как я могу это решить?
Вместо 'if (Library.get (i) .getType(). Equals (" Book "))' вы должны делать 'if (Library.get (i) instanceof Book)'. Но тогда лучше не снижать, а вместо этого применять метод toString, как предлагает один из приведенных ниже комментариев. –