Pessoal eu tenho um problema aqui que é o seguinte eu preciso sobrescrever um método chamado “print”.
Através de um interface que faça uso do toString das minhas entidades.
A minha duvida é como eu faria isso ?
Eu sei sobrescrever o método toString mas não sei como usar nesse caso, estou confuso.
Alguém poderia me esclarecer, dês de já valeu, muito obrigado.
Melhor dar um exemplo para você olhar com atenção e entender.
classCarro{publicCarro(Stringmodelo){this.modelo=modelo;}publicStringmodelo;publicStringtoString(){returnmodelo;}}classAviao{publicAviao(Stringmarca){this.marca=marca;}publicStringmarca;publicStringtoString(){returnmarca;}}classPai{publicvoidprint(){System.out.println("O pai tem um carro "+carro.toString());}publicCarrogetCarro(){returncarro;}privateCarrocarro=newCarro("Gol");}classFilhoextendsPai{@Overridepublicvoidprint(){System.out.println("O filho tem um carro "+getCarro().toString()+" e um aviao "+aviao.toString());}publicAviaogetAviao(){returnaviao;}privateAviaoaviao=newAviao("Embraer");}
Eu sobreescrevi o método “print” na classe filha
Usei o toString das entidades (carro e avião).
Não sei se o exercício (isso é um exercício de escola, não) quer que “através de um interface” use explicitamente o conceito de interface. Pelo que entendi basta apenas usar as coisas, se o exercício pede também uma interface, crie uma que as classes tenham de implementar.
mkaule
O meu problema é quase isso, mais voi mostrar aonde estou empacando.
publicclassAcervoimplementsPrints{privateStringnome;privateStringassunto;@OverridepublicStringtoString(){// TODO Auto-generated method stubreturn"Nome:"+getNome()+"\nAssunto:"+getAssunto();}@Overridepublicvoidprint(){// TODO Auto-generated method stub}//getters and setters ..............}publicclassLivroextendsAcervo{privateintqtdCaracteres;privateintqtdTabulacao;@OverridepublicStringtoString(){// TODO Auto-generated method stubreturnsuper.toString()+"\nQuantidade de Caracteres:"+getQtdCaracteres()+"\nQuantidade de Tabulação:"+getQtdTabulacao();}@Overridepublicvoidprint(){// TODO Auto-generated method stub}//getters and setters..........}publicinterfacePrints{publicvoidprint();}publicclassPrinter{publicvoidimprimir(List<Acervo>acervos){for(Acervoacervo:acervos){acervo.print();}}}//Eu tenho uma classe que guarda uma List<Acervo> não vou colocar se não vai ficar muito extenso.
O problema é: Todas as minhas entidades devem sobrescrever o método print através de um interface que fará uso do toString.
Mas como eu uso o metodo print nesse caso, uma vez que eu “acho” que o toString faz uma referencia ao objeto.
No exemplo acima o colega instancio as classes, no meu caso é diferente.
mkaule
Bom pessoal vim aqui postar minha resposta, achei bastante interessante o exercício, pois deixa bem claro o conceito de Polimorfismo, OO e se realmente você está aprendendo java ou apenas decorando código.
Muito obrigado quem pode compartilhar o conhecimento foi de grande ajuda.
Vou postar aqui como foi que resolvi meu problema.
//No método que sobrescrevia o print da interface ficou assim.@Overridepublicvoidprint(){// TODO Auto-generated method stub System.out.println(this);}//Esta é a classe que imprimia a galerapublicclassPrinter{publicvoidimprimir(List<Acervo>acervos){for(Acervoacervo:acervos){acervo.print();}}}
A sacada é o seguinte, vamos aos conceitos.
toString é um método que retorna uma representação do OBJETO em questão em forma de String.
E o this se referencia aquele objeto da classe. Já que foi sobrescrito o toString, o objeto vai “sair todo bonitinho”.
Se eu estiver errado em alguma coisa por favor me corrijam.