Olá! Sou novato em Java, e estou com um problema que não consigo achar solução, já procurei bastante e não achei algo relacionado…
Estou fazendo um programa de uma Biblioteca, e ela possui as classes Book, Disk e Magazine que são extended da classe “Media”(Midia).
A minha dúvida é: Na classe “MediaEntry”(a classe que cadastra e edita as mídias da biblioteca) eu tenho um arraylist de Media(Mídia), onde todas mídias são cadastradas no mesmo arraylist:
ArrayList<Media> media = new ArrayList<>();
Porém, quando eu preciso por exemplo acessar um método/atributo das classes extendidas(Livro, Disco e Revista) eu não consigo, aparece erro.
Exemplo:
media.get(i).getMediaTitle() <- FUNCIONA, pois é um método da classe “mãe”.
media.get(i).getBookISBN() <- NÃO funciona, pois é um método da classe extendida.
Alguém poderia me dar uma luz? Ou até mesmo me mostrar algum artigo/página sobre o assunto, pois tudo o que acho na internet é apenas sobre criar a Classe “mãe” e a extendida, e não sobre uma terceira classe que faça o cadastro/edição das classes…
PS: A ideia é ter todas mídias em um ArrayList apenas, e não um ArrayList para cada tipo de mídia.
Desde já obrigado!
Pra esclarecer, um exemplo mais simples do que existe em cada classe:
Classe Media: possui o titulo da mídia (entre outros)
Classe Book: possui o ISBN(código) do livro (entre outros)
Classe MediaEntry: Cadastra e Edita as mídias, porém nela não consigo acessar os métodos da classe Livro, que é extendida de mídia, e logo não consigo dar “continuidade” com o programa…
Se você sabe que aquele objeto é da classe estendida, faz um cast.
Exemplo:
Midia midia = midias.get(i);
if (midia instanceof Livro) {
Livro livro = (Livro) midia;
// Agora você consegue acessar os métodos específicos de Livro
}
1 curtida
Infelizmente não consegui… Realmente travei nessa interação. 
Minha classe “Book” é extendida de “Media”, e em uma classe “MediaEntry” eu realizo as operações do array “media”, criado na classe MediaEntry, como editar, cadastrar, deletar, etc.
ArrayList<Media> media = new ArrayList<>(); //ArrayList criado
O que acontece é que por exemplo, no método de checar a existência de uma Mídia de acordo com os dados oferecidos pelo usuário(Código, ISBN do livro ou título), na checagem do IF, Código e Título são da classe Media, e ISBN é da Classe livro, e apenas ela dá erro:
if((media.get(i).getMediaCode()==this.intSearcher)|| (media.get(i).***getBookISBN()***.contains(this.searcher))|| (media.get(i).getMediaTitle().contains(this.searcher)))
Onde coloquei os *** é o local especifico que o erro acontece, pois não há acesso à classe desse método.
Eu precisaria acessar também o toString da classe Book, mas acredito que resolvendo 1 problema o outro seria automaticamente resolvido.
E qual a dificuldade em jogar o media.get(i) em uma variável local do tipo Livro?