Olá Vitor, tudo bem com você?
Um objeto criado a partir de um tipo de referência conhece apenas métodos e atributos dessa referência. Como assim?
Se eu criar um objeto Cliente a partir da referência Autenticavel
Autenticavel vitor = new Cliente();
Eu só serei capaz de acessar os métodos que existem na interface autenticável, mas não serei capaz de acessar os métodos e atributos que existem na classe Cliente. Se eu criar um objeto com a referência Cliente
Cliente vitor = new Cliente();
Eu serei capaz de acessar tanto os métodos e atributos da classe Cliente, quanto os métodos da interface Autenticavel, pois a classe Cliente implementa esta interface.
Beleza, então se eu criar uma referência do tipo Cliente, eu tenho todos os métodos e a partir da interface, só os métodos dela. Como pode ser benefício usar o Autenticavel, se eu perco funcionalidades da minha classe?
É interessante usar a referência de uma interface, ou classe polimórfica, quando queremos comportamentos específicos em comum, que são definidos nessa interface ou classe. Por exemplo, no caso mostrado por você, queremos que um Cliente seja Autenticavel, isto é, tenha métodos de autenticação, no entanto, é interessante que um Gerente seja Autenticavel também, pois este terá acesso ao sistema e funcionalidades administrativas. Se nós fizermos ambas as classes implementarem a interface Autenticavel, podemos fazer um método de autenticação que autentica ambas as classes, e que recebe justamente um Autenticavel, que guarda todo o comportamento de autenticação.
O polimorfismo traz possibilidades muito interessantes para evitar reutilização de código, e para aprimorar a arquitetura do sistema!
Em caso de dúvidas, estou à disposição.
Um grande abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!