Metodo genérico utilizando Instanceof

Olá,
Tenho uma classe Interface que serve apenas para a impressao de dados na tela.
Tenho várias classes, como por exemplo: Livro, Jornal, Cd … e todas estas sao subclasses da classe Acervo.
O meu método para a impressao das informações, recebe um objeto do tipo Acervo como mostrado abaixo:

[code]
public class Interface {

   public static void mostraAcervo(Acervo acervo) {  
       if(acervo instanceof Cartaz){  
              
           System.out.println(  
           "Título: "+ acervo.getTitulo()+" - "+acervo.getnEdicao()+ "  - "+acervo.getCidade()+ "  - "+ acervo.getEditora()+ "  - "+acervo.getAno()+  
           "\n Palavras-chave:"+"\n 1."+acervo.getPalavraChave1()+"\n 2."+acervo.getPalavraChave2()+"\n "+acervo.getPalavraChave3());  
             
       }else if(acervo instanceof Cd){  
         
         //AQUI EU TERIA QUE IMPRIMIR OS DADOS QUE SAO COMUM A TODAS CLASSES(atributos da classe Acervo) e também alguns outros atributos como o tempo de duração (no caso do Cd) no qual eu teria que acessar com um get. Para ilustrar melhor ficaria assim:  acervo.getDuracao() - mas claro que não é possível fazer isso ja que a classe acervo não contém o método getDuracao() e quem o contém é  a classe filha(Cd)  

            
       }  [/code]

Então pessoal, como posso fazer para exibir estes atributos que são exclusivos da subclase?
Obrigado

OBS: estou postando novamente pois postei na sessão errada no meu post anterior

Você pode resolver isso de duas maneiras:

utilizando cast:

System.out.println( ((Cd)acervo).getDuracao() );

ou vc pode fazer um novo objeto Cd:

Cd meuCd = acervo; System.out.println( meuCd.getDuracao() );

Voce precisará usar reflection

http://java.sun.com/docs/books/tutorial/reflect/index.html

[quote=fesaab]Você pode resolver isso de duas maneiras:

utilizando cast:

System.out.println( ((Cd)acervo).getDuracao() );

ou vc pode fazer um novo objeto Cd:

Cd meuCd = acervo; System.out.println( meuCd.getDuracao() );[/quote]

Olá,
Não está correto o jeito que você fez, pois um objeto da classe filha (meuCd) está recebendo um objeto da classe mãe(acervo), e isso é impossivel, porém se fosse ao contrário estaria certo.Digo, a classe mae receber uma classe filha.
Acho que oque você quis dizer foi:

Cd meuCd = (Cd) acervo; meuCd.getDuracao();

Fiz desta maneira e por enquanto não apresentou nenhum problema…
De qualquer jeito, obrigado pela dica.

como o rogelgarcia mencionou, use reflection…

ops, foi mal, falto o cast no meu código mesmo…

quanto ao reflection, eu acho que não tem necessidade de usar algo tão poderoso para um problema tão simples…