intid; publicSurfista(String nome,String apelido,intidade,intid){ setId(id); setApelido(apelido); setIdade(idade); setNome(nome); }...getters& setters comuns abaixo Saida:br.com.blog.gmachado1.model.Surfista@11c491Agoraa pergunta, isso acrescrenta informacao do objeto? Ou melhor,informa algo?Pramim nao! Entaosempre que possivel podemos sobrescrever o metodo toString naclasse colocando um metodo com as mesmas assintaturas (nome dometodo, retorno e paramentro) fazendo assim trazer algumainformacao mais util. Que tal esta? @Override publicString toString() { return"Surfista[nome="+ nome+ ",idade="+ idade+ "]"; }Saida:Surfista[nome=Miguel Pupo, idade=21]Agorapodemos tirar mais informacoes sobre este objeto concorda? Sobrescrevendoo metodo equals() Excetoem alguns momentos onde podemos comparar duas variaveis primitivas,a maioria dos casos em que necessitarmos realizar a comparacaosempre iremos usar o metodo equals() que e umdos varios metodos herdados da classe Object e que e aconselhavelser sobrescrito. Autilizacao para comparar dois objetos utilizando o operador igual(= =) que e o que ocorre na implementacao da classe object, podeate acertar em alguns casos mas isto nao podera te oferecerseguranca pois a sua forma de comparacao e relativa aos objetosonde serao consideradosiguais se somente seas duas referencias compartilharem o mesmo objeto, o que poucasvezes isso ocorre alem desabermos que apesar de serem objetos diferentes, eles podem estar sereferindo ao mesmo. Vamosseguir o codigo dado ate aqui e imaginar o codigo da seguinteforma:publicclassSurfista { intid; Stringnome; Stringapelido; intidade; publicstaticvoidmain(String args[]){ Surfistas1= newSurfista("GabrielMedina","Medina",19, 1); Surfistas= newSurfista("GabrielMedina","Medina",19, 1); System.out.println(s.equals(s1)); } //getterse setters abaixo Saida: false Supondoque id seja um valor unico na tabela que defina a identidade doobjeto.Aodefinirmos 2 surfistas iguais, ao verificarmos sua igualdade pelaforma tradicioal nao teremos sucesso conforme pode ver acima, apesarde sabermos que sao os mesmos.Istoocorre por termos 2 instancias iguais em memorias diferentes, pararesolvermos este problema, podemos simplesmente sobrescrever o metodoequals da melhor forma que convem.Nonosso caso: @Override publicbooleanequals(Object obj){ if(objinstanceofSurfista && (((Surfista)obj).getId()== this.id)){ returntrue; }else{ returnfalse; } } Primeiropassamos o paramentro como object ate porque deve sobrescreverentao devemos passar sempre o mesmo tipo de paramentro.Segundodevemos verificar se e uma instancia da classe ea esperada, para que possamosem seguida converte-la semocorrer ClassCastException, para emseguida obterseu(s) valores chaves erealizar a comparacaoentre os valores do objeto atual e o passado por parametro.Aosobrescrevermos o metodo equals da nossa classe podemos rodar everificar o que ocorre... Parasobrescrever um metodo equals, devemos sempre nos preocupar comalguns contratos que devem ser seguidos tais como: Reflexivo: Para qualquer valor de referencia de x, x.equals() deve retornat true. Simetrico: Para qualquer valor de referencia de x e y. se x.equals(y) retornar true, y.equals(x) devera tambem retornar true. Transitivo:Para qualquer valor de referencia x, y e z, se x.equals(y) retornar true e y.equals(z) retornar true. Necessariamente z.equals(x) tera que retornar true; Consistente: Nao importa o numero de vezes que ira realizar a igualdade entre 2 objetos, se nada foi alterado, sempre que uma validacao de igualdade der true devera ser true ou caso de false devera ser false.Sobrescrevendoo metodo hashCode() Osmetodos hashCode() sao utizados para facilitar as buscas de umobjeto. Alguns conjuntos de objetos tais como HashMap e HashSet entreoutros se utilizam do algoritmo deste metodo que retorna sempre umnumero inteiro para auxiliar nas buscas por um item da lista, destaforma ao inves de realizar a busca por um item em toda lista,podera ser feito uma