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

Tipos de referências

eu não etendi muito bem o conceito de referenciar por um tipo mais genérico, na minha cabeça ainda parece mais vantajoso usar como

Gerente  gerente = new Gerente 

Não etendi a parte sobre quando devemos usar essas referências do tipo mais genérico, como:

Funcionario gerente = new Gerente
Autenticavel referencia = new ClienteI(); 

eu fiquei um pouco bugado nessas duas últimas situações, não consegui entender o conceito muito bem

2 respostas
solução!

Oie Matheus, tudo bem contigo?

Explicação do conceito:

Referênciar pelo tipo mais genérico é um dos beneficios do polimorfismo, onde a classe filha pode ser instânciada a partir da referência da super classe, ao fazer isso esse objeto só vai poder chamar e manipular os métodos herdados da super classe. Ou seja, um objeto "gerente" que é instanciado da seguinte forma Funcionario gerente = new Gerente só vai poder chamar os métodos e atributos que advém da classe "Funcionario", se "Gerente" tiver algum método próprio ele não conseguirá ser chamado. E isso se repete no caso de Autenticavel referencia = new ClienteI();, onde só poderá ser chamado os métodos que a interface possuí.

Agora se ele for instanciado dessa maneira Gerente gerente = new Gerente, ele vai poder chamar tanto os métodos herdados de "Funcionario" como também os métodos que forem próprio de "Gerente", por isso pensando na questão de vantagem, esse jeito aqui realmente é mais vantajoso.

Quando usar o tipo mais genérico?

A resposta é depende, alguns programadores quando não existe necessidade de se utilizar os métodos e atributos exclusivos da classe filha, optam por instanciar de maneira genérica, desse jeito trabalhando apenas com os métodos da super classe. De resto, na maioria das vezes realmente serão raro os momentos onde você vai ser obrigado a instanciar de forma genérica, mas eles existem, por isso é importante saber como fazer. Um exemplo que posso te dar é que em aplicações mais complexas, pode acontecer de chegar em uma situação onde você não sabe qual classe chegará para ser instanciada, você só sabe que elas serão filhas de uma super classe ou implementam a mesma interface, e nessa situação você coloca para instanciar com o tipo genérico, pois dessa forma todas as classes que chegarem serão instanciadas.

Espero que tenha conseguido esclarecer sua dúvida, se não, pode enviar mensagem por aqui que irei te ajudar :)

Bons estudos!

Agradeço muito pela sua atenção, realmente ficou bem esclarecido.