Oie Pedro, tudo bem contigo?
Podemos usar polimorfismo com "herança" ou "interfaces" que nós criamos, ou usando aquelas que o próprio Java já tem. Você irá ver sobre as "interfaces" no final desse curso "Java Polimorfismo".
Quanto a parte da instancia, a resposta é depende. A vezes você tem uma lógica que pode ser aplicada em diversos objetos, mas por conta de serem objetos de tipos diferentes você acabaria tendo que criar uma lógica para cada tipo sendo que no final apenas uma serviria, e para fazer apenas uma você teria que usar polimorfismo aonde o método poderia receber todos os filhos de determinada classe, e assim através dessa única lógica você poderia aplicar a mesma solução em diversos objetos diferentes. Em outros casos, em situações mais especificas daquele objeto aonde nenhum objeto de outro tipo passaria pela mesma questão, ai o ideal seria o usar a referência da classe que representa ele e não da classe pai.
Importante ressaltar que se o objeto for uma instancia de referencia da classe pai, ele só irá poder usar os métodos e atributos da classe pai, agora se ele for uma instancia de referencia a classe que representa ele, ele poderá usar os métodos e atributos que só ele tem como também poderá usar aqueles que ele herda da classe pai.
Espero que a explicação não tenha ficado muito abstrata, qualquer coisa me avisa que fico a disposição :)
Bons estudos!