Fala, Sandro! Tudo bem contigo?
São dúvidas muito importantes que as vezes deixamos passar batido:
Imagina se o nome do parâmetro for igual ao nome do atributo da classe
public void aplicaDesconto(double valor) {
valor -= valor * valor;
}
No lugar de porcentagem eu coloque o nome de valor. Veja o quão confuso seria: espero receber um valor que vou esperar a subtração de um valor por outro valor e multiplicar o valor da subtração pelo valor recebido. O Java saberá quem é quem?
A resposta é não! Vai até compilar o código, mas o valor considerado vai ser o de menor escopo.
É aqui que entra a palavra this para mostrar que esse é um atributo da Classe e não o argumento recebido. Ainda que seja opcional, é sempre bom utilizar a palavra this em atributos para evitar futuros problemas de ambiguidade e assim você deixar claro que este é um atributo da classe e não uma simples variável.
Neste caso ficaria assim:
public void aplicaDesconto(double valor) {
this.valor -= this.valor * valor;
}
Agora sei exatamente quem é o atributo da classe e quem é o parâmetro que receberá.
O boolean sempre vai retornar verdadeiro ou falso. Até aí tudo bem! O que acontece é que posso nomear esse meu atributo booleano. Vamos supor que abro uma conta e possui os seguintes atributos:
private int agencia;
private int numero;
private String nome;
private boolean contaAtiva;
Agora vou criar um construtor para que todas as vezes em que eu criar uma nova conta ela já comece com o atributo contaAtiva
já receba o valor como falso
public Conta (int agencia, int numero, String nome) {
this.agencia = agencia;
this.numero = numero;
this.nome = nome;
this.contaAtiva = false;
}
Veja que só vou inserir os dados de Agência, Número e Nome pois a conta não estará ativa no momento da criação. A qualquer momento posso alterar isso criando um método para que todas as vezes em que eu chamar esse método ative a conta
O return é usado em quando queremos retornar algo. Isso parece vago, mas vamos exemplificar.
Quando gero os Getters e Setters eles apresentam dois comportamentos: um eu quero inserir informações e outro eu quero buscar informações.
Todas as vezes em que eu insiro informação, na verdade eu não espero que "me retorne" nada. Simplesmente insira um nome, agencia ou número e o que diferencia isso é uma palavra chave chamada void. Todas as vezes em que ver essa palavra no método saiba que ela vai inserir alguma informação.
public void setNome (String nome) {
this.nome = nome;
}
Na hora em que eu criar um objeto e inserir um nome no objeto, nada retornara
Cliente cliente1 = new Cliente();
cliente1.setNome = "Fulano";
Quando quero buscar uma informação perceba que eu preciso que me traga alguma informação e para que isso aconteça utilizamos return
public String getNome () {
return nome;
}
O que estamos retornando é o nome que inseri. Exemplo:
Cliente cliente1 = new Cliente();
cliente1.setNome = "Fulano";
System.out.println(cliente1.getNome());
Ele vai retornar o nome que inseri com o setNome
Sandro, tentei deixar o mais simples possível, mas caso ficou alguma dúvida, me dê um retorno, amigo!!!
Espero ter ajudado!
Um abraço e bons estudos