Estou começando a estudar lógica de programação e POO (Programação Orientada a Objetos), mas ainda não entendi a Definição e Como utilizar “Parâmetros” (Ou fazer a passagem deles).
E também não entendi para que serve a autorreferência This, alguém tem algum exemplo fácil para explicar?
Exemplo clássico do uso de this no Construtor, para ajudar no entendimento:
public class Pessoa {
private String nome;
private int idade;
public Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
// getters
}
Perceba que, se o this não fosse utilizado, o compilador não saberia com qual nome e qual idade eu estou trabalhando. Na realidade, ele assumiria que eu estou trabalhando apenas com a variável local (que é passada como argumento para o construtor), o que seria redundante, afinal, ela estaria recebendo a si mesma.
Usabilidade:
// passando nome e idade como argumento
// para os parâmetros definidos no construtor
Pessoa p = new Pessoa("João da Silva", 23);
Parâmetros são utilizados pelos métodos para serem processados conforme a regra de negócio. Por exemplo, posso ter um método chamado soma que tenha dois parâmetros: valorA e valorB. Logo, para obter o resultado desse método, preciso passar dois valores para ele somar. Exemplo:
public int soma(int valorA, int valorB) {
return valorA + valorB;
}
O método não precisa obrigatoriamente ter parâmetros; é sua regra de negócio e a lógica utilizada quem determinarão isso.
Já a questão do this, é apenas uma palavra reservada para que o Java entenda com o que você está lidando, se é com o parâmetro do método ou se é com algum atributo da classe, visto que posso ter uma classe com o atributo valorA e ao mesmo tempo ter um método que tenha um parâmetro chamado valorA.
Ao usar this.valorA, estou me referindo ao atributo da classe.
Ao usar simplesmente valorA, estou me referindo ao parâmetro do método.
O this, além dos objetivos esclarecidos pelos colegas acima, serve principalmente para se referencias a própria instância do objeto em questão. Ou seja, o this diz pro java, por exemplo, que ele deve trabalhar não com qualquer instância do objeto em questão, mas sim com aquela instância.
Isto é importante quando se trabalha com métodos estáticos, pois um método estático não pode pegar nada instância, pois não é do contexto.