10.8. Agora SIM! – Imprimir, duplicar e comparar objetos

Na classe Jogador vamos acrescentar 3 métodos que, quando invocados sobre um dado jogador, devolvem a sua representação textual, constroem e devolvem uma cópia sua e decidem se é igual a um dado jogador.

O método toString

Quando imprimimos um objeto usando System.out.println ou System.out.print, o método toString é invocado automaticamente sobre esse objeto.

Em cada classe há um método toString acessível, mesmo quando não está explicitamente definido na classe (como é o caso da classe Jogador).

Este método toString, quando invocado sobre um dado objeto, retorna a representação desse objeto em formato de string.

Este método está acessível em todas as classes porque é “herdado” da classe Object (este é um tópico mais avançado, que não exploraremos aqui).

A versão por omissão do método toString, herdada por toda e qualquer classe, retorna

Já vimos o resultado deste método no início da secção 10.7.: instrução System.out.println(meuJogador) invoca automaticamente o método toString sobre o objeto meuJogador e é a string resultante dessa invocação que é escrita no ecrã – "Jogador@677327b6".

Quando construímos uma classe, podemos redefinir o comportamento deste método, fazendo com que devolva uma representação textual do objeto mais apropriada ao que queremos.

Na classe Jogador, poderíamos ter o seguinte método toString:

Agora, existindo este método na classe Jogador, o output resultante da instrução System.out.println(meuJogador), na nossa classe ClienteDeJogador, seria:

O método igualJogador

Existem duas noções de igualdade entre objetos:

O operador == testa a identidade. Já estudámos este assunto.

No que diz respeito à equivalência, não há nenhum operador que a teste, porque o significado de equivalência depende do tipo específico dos objetos em questão.

Em vez disso, todas as classes têm acessível um método de nome equals, com o propósito de definir a equivalência.

Tal como com o método toString, o método equals deveria ser redefinido nas novas classes, porque

No entanto, porque o conceito de equivalência envolve uma série de conceitos mais avançados, não trataremos aqui da redefinição do método equals.

 

Em vez disso, criaremos um método de nome igualJogador que tem um parâmetro do tipo Jogador e devolve true se os atributos do objeto corrente (this) e os do objeto dado como parâmetro têm valores iguais:

As seguintes instruções, se acrescentadas à classe ClienteDeJogador, resultariam no output “Sao iguais!”

O método copia

A tarefa de criar uma cópia de um dado objeto deve ser dada ao próprio objeto, porque é ele que possui a informação necessária. Então adicionamos este método à classe Jogador:

Agora, sempre que uma classe cliente precisa de criar uma cópia de um objeto do tipo Jogador, basta usar este método, como por exemplo, na nossa classe ClienteDeJogador:

Mais para a frente neste livro veremos outra forma de criar um clone de um objeto.

 

 


 

Anterior: 10.7. Imprimir, duplicar e comparar objetos – como NÃO fazer!

Seguinte: 10.9. A classe Jogador completa