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

[Dúvida] Uso vários tipos de referência

Autenticavel referencia = new Gerente();

Autenticavel referencia = new Cliente();

Autenticavel referencia = new Administrador();

Nesse exemplo feito em aula, temos que a referência por ser do tipo genérica, no caso uma interface, eu posso referenciar (apontar) qualquer objeto que implementou essa interface "Autenticavel" certo?

A dúvida: feito isso, a contrapartida é, por exemplo, pegando a primeira linha Autenticavel referencia = new Gerente(); , um objeto gerente foi instaciado, mas como o tipo da referencia é genérica eu só posso usar os métodos da interface? ou posso invocar os métodos implementados na classe gerente também? Visto que o java olha para a tipagem.

2 respostas

Oi Tadeu! Tudo bem?

É exatamente isso que você falou. Ao fazer Autenticavel referencia = new Gerente();, o compilador entende que você está reservando um espaço na memória para um Autenticável, e não para um Gerente. Por isso, se você tenta chamar um método de Gerente, o programa não irá nem compilar. Recomendo que você faça esses testes pra ver como realmente funciona!

Porém, se você tem um método que está programado de um jeito na interface e sobrescrito de outro jeito na classe que a implementa, o resultado será invocar o método da classe "filha", porque no tempo de execução o Java consegue entender que o objeto é da classe filha e executa o método mais específico. Falei de algum parecido em um outro tópico, caso queira dar uma olhada: https://cursos.alura.com.br/forum/topico-duvida-polimorfismo-267137

Espero ter contribuído! Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!
solução!

Boa noite Tadeu, tudo bem?

Seguem respostas:

"Nesse exemplo feito em aula, temos que a referência por ser do tipo genérica, no caso uma interface, eu posso referenciar (apontar) qualquer objeto que implementou essa interface "Autenticavel" certo?"

Sim, isso mesmo, todo mundo que implementar a interface "Autenticavel" vai entrar no relacionamento "é um", então neste caso "Autenticavel referencia = new Gerente();" o Gerente "é um" autenticavel.

A dúvida: feito isso, a contrapartida é, por exemplo, pegando a primeira linha Autenticavel referencia = new Gerente(); , um objeto gerente foi instaciado, mas como o tipo da referencia é genérica eu só posso usar os métodos da interface? ou posso invocar os métodos implementados na classe gerente também? Visto que o java olha para a tipagem.

Sim, isso mesmo, voce podera utilizar somente os métodos "genericos" por assim dizer pois ao final voce tem uma referencia "Autenticavel" em mãos e não um Gerente.

Abraço!