Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Praticando herança e interface

O professor escreveu o código como se estivesse criando um objeto normal de classe.

AutenticacaoUtil util = new AutenticacaoUtil();

(util está escrito em marrom)

Até aí tudo bem. Logo em seguida ele transformou esse objeto em um atributo!?!?!?!:

this.util = new AutenticacaoUtil();

(util escrito em azul)

Na sequencia, ele utiliza esse atributo para invocar um método, o setSenha()!?!?!?!;

Primeira vez que isso aparece no curso...

Eu tentei fazer um teste simples, criei duas classe, uma classe (teste) com um atributo (String nome) e um método (setNome();), e outra classe (teste1) com o método main, e o objeto (t1) da primeira classe.Posteriormente no main eu invoquei o método utilizando o objeto (t1 escrito em marrom), e funcionou conforme esperado (t1.setNome("nomet1");), e tentei invocar o método pelo atributo (escrito em azul), e não funcionou (nomet1.setNome("novonomet1"));. O código estava assim;

primeira classe

public class teste { String nome;

public void setNome(String nome) {
    this.nome = nome;
}

}

segunda classe com o main

public class teste1 {

public static void main(String[] args) {
    teste t1 = new teste();
    t1.setNome("nomet1"); // funcionou ok, como eu esperava.

    nomet1.setNome("novonomet1"); // nao funciona, o que eu tb esperava.

}

} Então a minha dúvida é: Quando o professor escreveu essa linha: this.util = new AutenticacaoUtil(); ele fez com que o "util" tivesse o poder de invocar métodos (objeto escrito em marrom), ao mesmo tempo que tb é um atributo (escrito em azul)?

Não ficou exatamente claro pra mim como um atributo pode invocar um método. Poderia explicar de outra forma, por favor?

Curso> Java Parte 3: Entendendo Herança e Polimorfismo, Aula> Praticando herança e interface, Atividade> Revendo a composiçãoAos 6min e 25s.

Obrigado!

3 respostas
solução

Olá Átila!

Na verdade é mais simples que isso.

Quando ele fez isso:

private AutenticacaoUtil util;

Ele estava dizendo que o atributo "util" é do tipo "AutenticacaoUtil". É importante entendermos que nesse processo só dizemos de que tipo ele é mas ainda não construimos nada dentro dele.

É como se tivéssemos copiado uma planta da casa e ainda não levantamos os muros entende?

Se você tentar chamar o método setSenha nesse momento ele irá dar erro pois o objeto não foi construído, ele não está sólido e consequentemente você não pode acessar suas funcionalidades.

Para construir o objeto o professor fez o uso do método construtor:

this.util = new AutenticacaoUtil();

Quando ele fez isso ele gerou todo o alicerce, levantou as paredes e finalmente você pode fazer alguma coisa com esse atributo. Como nesse caso: chamar o método para setar a senha.

Espero que tenha entendido e caso não tenha pode me falar que eu tento explicar de outra maneira!

Bons estudos!

Olá Átila!

Sua dúvida foi sanada?

Oi Guilherme, tudo bem?

Faz um bom tempo que eu conclui esse curso, eu apenas respostei a dúvida pois na primeira vez eu fiquei sem resposta. Quando eu voltar para essa formação eu vou poder testar se eu realmente entendi a resposta ou não. De qualquer maneira, eu agradeço pela resposta, e também pelo acompanhamento. Gosto da segurança de ter o suporte de alguém. Vou marcar como solucionado. Se quando eu voltar a formação eu não conseguir reproduzir o código eu aviso. OBRIGADO!