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.
class Carro {
public Carro (String modelo) { this.modelo = modelo; }
public String modelo;
public String toString() { return modelo; }
}
class Aviao {
public Aviao (String marca) { this.marca = marca; }
public String marca;
public String toString() { return marca; }
}
class Pai {
public void print() {
System.out.println ("O pai tem um carro " + carro.toString());
}
public Carro getCarro() { return carro; }
private Carro carro = new Carro ("Gol");
}
class Filho extends Pai {
@Override
public void print() {
System.out.println ("O filho tem um carro " + getCarro().toString() + " e um aviao " + aviao.toString());
}
public Aviao getAviao() { return aviao; }
private Aviao aviao = new Aviao ("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.
O meu problema é quase isso, mais voi mostrar aonde estou empacando.
public class Acervo implements Prints{
private String nome;
private String assunto;
@Override
public String toString() {
// TODO Auto-generated method stub
return "Nome:"+getNome()+"\nAssunto:"+getAssunto();
}
@Override
public void print() {
// TODO Auto-generated method stub
}
//getters and setters ..............
}
public class Livro extends Acervo{
private int qtdCaracteres;
private int qtdTabulacao;
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString()+"\nQuantidade de Caracteres:"+getQtdCaracteres()
+"\nQuantidade de Tabulação:"+getQtdTabulacao();
}
@Override
public void print() {
// TODO Auto-generated method stub
}
//getters and setters..........
}
public interface Prints {
public void print();
}
public class Printer {
public void imprimir(List<Acervo> acervos){
for (Acervo acervo : 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.
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.
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println(this);
}
//Esta é a classe que imprimia a galera
public class Printer {
public void imprimir(List<Acervo> acervos){
for (Acervo acervo : 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.