Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Método abstrato vs Interface

Queria confirmar algumas coisas sobre interfaces e métodos abstratos.

Conseguimos polimorfismo através de herança e também de interfaces certo? Com herança, podemos definir um supertipo com um método abstrato. Dado isso, conseguimos realizar o polimorfismo, já toda que extender o meu supertipo terá uma implementação diferente no subtipo.

Com interfaces podemos ter o mesmo feito, porém, podemos fazer isso sem herança (o que é muito bom pois elimina o acoplamento entre a classe mãe e a filha). Podemos ter a referência de um tipo de interface no método e dentro dele fazemos a chamada do método da interface. Para cada classe que implementa a interface, ele se comportará de uma forma diferente.

Está correto essa diferença? Por isso que quando queremos que cada objeto tenha uma implementação diferente, usamos interfaces?

Ah, uma outra pergunta... eu entendi que quando usamos polimorfismo, o tipo da referência é um supertipo. Quando instanciamos um subtipo e colocamos a referência dela de um supertipo, qual a motivação da minha referência só conhecer os métodos do supertipo e não do subtipo?

Desculpa o tanto de perguntas... preciso firmar isso de uma vez por todas na minha cabeça rsrs.

1 resposta
solução!

Oi Leonardo, tudo bem?

O que você escreveu está correto! O Polimorfismo é a capacidade de um objeto de ser referenciado de várias formas, coisa que conseguimos através do uso da herança (define o que uma subclasse é) e da interface (define o que uma subclasse deve ser capaz de fazer). Em relação a sua última pergunta, isso acontece pois o compilador enxerga apenas o tipo da referência e não o que está lá dentro, quando declaramos uma referência do tipo Funcionario e apontamos essa referência para um Gerente, tudo que o Java entende é que a referencia é um Funcionario e acabou. Em aulas futuras, mais especificamente, nas aulas do curso de Collections, será visto um pouco mais sobre as melhores práticas quando lidamos com esse tipo de situação onde podemos fazer uso ou do polimorfismo ou dos métodos mais específicos da subclasse.

Espero ter ajudado, se ficou qualquer dúvida estamos a sua disposição!

Bons estudos!!