Galera bom dia!
Alguém pode me explicar qual a diferença entre this. e This()?
Galera bom dia!
Alguém pode me explicar qual a diferença entre this. e This()?
Fala Lenin, tudo certo?
A palavra-chave this
faz uma referência ao próprio objeto de chamada. Como assim? Vamos imaginar a classe:
class Pessoa{
public String nome;
public Pessoa(String nome){
this.nome = nome;
}
}
Uma classe bem simples que representa uma pessoa com um nome apenas. A referência this, chamada no construtor, se refere ao próprio objeto que o chama, e é comumente utilizado para atribuir valores iniciais aos atributos de um objeto, a partir do construtor!
A referência this()
é um pouco diferente, pois é uma referência para um construtor da classe. Como assim? Dentro das classes Java podemos ter mais de um construtor, graças a sobrecarga de métodos! Para isso, basta que a assinatura do construtor mude de um para outro, ou seja, que eles recebam parâmetros diferentes. Exemplo na mesma classe pessoa:
class Pessoa{
public String nome;
public Pessoa(){
this("Sem nome");
}
public Pessoa(String nome){
this.nome = nome;
}
}
Note que temos dois construtores: Um que recebe uma string e faz a atribuição do nome da Pessoa, assim como no exemplo anterior; e outro um tanto quanto diferente, pois ele não recebe nada e chama um this()
passando a string "Sem nome"
. Como fica a execução desses construtores?
class Main {
public static void main(String args[]) {
Pessoa p = new Pessoa("Arthur");
System.out.println(p.nome); // Arthur
}
}
Nesse caso, estou instanciando uma Pessoa e já passando via parâmetro do construtor o nome "Arthur"
, e quando imprimimos na tela o valor do nome, ele mostra exatamente esse. Agora chamando o outro construtor:
class Main {
public static void main(String args[]) {
Pessoa p = new Pessoa();
System.out.println(p.nome); // Sem nome
}
}
Agora, não esotu passando nenhum nome para o construtor, e o que ele faz é internamente entrar naquele construtor sem parâmetros, com a chamada do this()
. Dentro dessa chamada, faço uma referência para o outro construtor e passo a String "Sem nome"
para a pessoa, que será mostrada na impressão do nome.
Sendo assim, a palavra this
é utilizada para fazer referência direta ao objeto em questão, já this()
é usado quando queremos fazer referência a um construtor da classe, ou seja, nos possibilita aproveitar código de um construtor em um outro construtor, como mostrado no exemplo!
Em caso de dúvidas, estou à disposição.
Um grande abraço e bons estudos!