Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida no "this" - Aula 6 - Interfaces

Boa tarde pessoal.

Eu achava que tinha entendido o uso do "this", até chegar nessa aula e ficar travado tentando entender isso que deve ser bem simples. O professor utilizou "this.senha", se referenciando ao atributo da classe SistemaInterno. Ele usou chamando o método "autentica" que é da classe "Gerente" e que está sendo chamado com a referência "g", que vai ser um objeto "Gerente" instanciado.

public class SistemaInterno{

    private int senha = 2222;

    public void autenticando(Gerente g){

        boolean autenticou = g.autentica(this.senha);

        if(autenticou){
            System.out.println("Pode entrar no sistema");
        } else {
            System.out.println("Não pode entrar no sistema");
        }
    }
}

O "this" não se refere(auto-referência) a uma referência(g) de um objeto já instanciado que está chamando o método(g.autentica(this.senha)) ? Esse objeto tem um atributo chamado "senha", eu imaginava que com o uso do "this" ele usaria a "senha" do objeto já instanciado. E como está em "private", esse método da outra classe não conseguiria sem usar um "g.getSenha". Quando se coloca um parâmetro em um método ele será uma variável local, só vai existir naquele método? Por isso o uso do "this.senha" pegando o atributo "senha" da própria classe?

Main:

Gerente g = new Gerente();
g.setSenha(2222);

SistemaInterno si = new SistemaInterno();

si.autenticando(g);

Classe Gerente:

private int senha;

public boolean autentica(int senha){
    if(this.senha==senha){
    return true;
    }

}

Obrigado .

4 respostas
solução!

Você entendeu corretamente, só não se atentou a um detalhe: qualquer this vai se referir ao objeto relativo à classe que você está no momento. Neste caso, como você está em SistemaInterno, o this vai referenciar a instância desta classe, quando esta for instanciada, acessando seus métodos/atributos.

Ou seja, o método autenticando vai autenticar um Gerente g, chamando g.autentica passando a senha do SistemaInterno(this.senha do SistemaInterno). O método autentica do Gerente vai receber esta senha e comparar com a senha do Gerente(this.senha da classe Gerente).

Perfeito Cayo, muito obrigado.

o This vai estar se referindo ao objeto que ainda vai ser instanciado da classe SistemaInterno, que no momento ainda não existe.

O this.senha vai apontar para a senha do objeto futuro da referencia a baixo pertencente ao SistemaInterno

 public class SistemaInterno{

    private int senha = 2222;

No momento da criação do método autenticando o g é uma variável temporária que vai guardar um abjeto do tipo Gerente que vai poder chamar a metodo dessa classe, o metodo autentica. mas o valor jogado como parametro vai ser o this.senha que pertence a SistemaInterno.

Obrigado Felipe.