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.