Como os atributos foram declarados como private
, não há forma de as classes cliente da classe Jogador
conhecerem diretamente os valores dos objetos que criam.
Para os atributos cujos valores queremos poder revelar (neste caso todos), declaramos métodos que retornam o seu valor.
xxxxxxxxxx
public class Jogador {
private String nome;
private int pontuacao;
private int maximoJogada;
/**
* Inicializa os atributos de uma nova instancia
* @param nomeJog O nome do novo jogador
* @requires nomeJog != null
*/
public Jogador (String nomeJog) {
this.nome = nomeJog;
this.pontuacao = 0;
this.maximoJogada = 0;
}
/**
* O nome deste jogador
*/
public String nome () {
return this.nome;
}
/**
* A pontuacao deste jogador
*/
public int pontuacao () {
return this.pontuacao;
}
/**
* O numero maximo de pontos que este jogador ganhou numa
* soh jogada
*/
public int maximoNumaJogada () {
return this.maximoJogada;
}
// Ainda nao estah completa
}
Não é obrigatório que os nomes dos métodos que revelam os valores dos atributos sejam iguais aos nomes que nós demos aos atributos, embora neste caso isso aconteça com os dois primeiros atributos.
A execução das instruções
xxxxxxxxxx
Jogador meuJogador = new Jogador("Maria");
System.out.println("O nome eh " + meuJogador.nome());
Jogador teuJogador = new Jogador("Pedro");
System.out.print("O nome deste outro eh " + teuJogador.nome());
do método main
da classe ClienteDeJogador
, tem como efeito a escrita, no standard output, das frases
xxxxxxxxxx
O nome eh Maria
O nome deste outro eh Pedro
Repare que os métodos de instância (não static
), definidos atrás, retornam valores diferentes conforme o objeto alvo de uma específica invocação.
O objeto alvo da invocação é diferente nas invocações meuJogador.nome()
e teuJogador.nome()
, logo this
refere-se a objetos diferentes de cada vez – na primeira invocação this
refere o objeto cujo nome é Maria e na segunda invocação this
refere o objeto cujo nome é Pedro.
A figura seguinte ilustra o estado da memória no fim da execução do método nome()
aquando da invocação meuJogador.nome()
na instrução System.out.println("O nome eh " + meuJogador.nome());
acima:
Repare como a variável this
referencia o mesmo objeto que foi alvo da invocação do método.
A figura seguinte ilustra o estado da memória no fim da execução do método nome()
aquando da invocação teuJogador.nome()
na instrução System.out.println("O nome deste outro eh " + teuJogador.nome());
acima:
Volte a reparar no objeto referenciado por this
desta vez. É o mesmo objeto referenciado pela variável teuJogador
, exatamente aquele sobre o qual a invocação foi feita.
Anterior: 10.3. Construtores
Seguinte: 10.5. Métodos que alteram o estado