É correto afirmar que só haverá o polimorfismo se houver a herança?
É correto afirmar que só haverá o polimorfismo se houver a herança?
Também pode ocorrer com classes que implementam interfaces
Não Márcio. Como disse o Christian, uma interface pode não ter uma implementação concreta e ser utilizada!
Por exemplo:
private Collection<Aula> aulas;
public void testePolimorfismo() {
    aulas = new ArrayList<>();
    aulas = new LinkedList<>();
    aulas = new HashSet<>();
}Existem dois tipos de polimorfismo.
Polimorfismo de Sobrecargar - Metodos com assinaturas diferentes.
public class Calculadora {
// Metódos com mesmo nomes, porém a maneira que ele se comporta ira depender dos parametros passados. Se for passado dois inteiros sera executado o primeiro, se for passado 2 double sera executado o 2.
    public int somar(int valor1, int valor 2){
        return valor1 + valor2;
    }
    public double somar(double valor1, double valor2){
        return vamor1+valor2;
    }
}E o polimorfismo que você citou que é o de sobreescrita de metódos de herança/classe abstrata/interface
public interface Calculadora{
    public double somar(int valor1, int valor2);
}
public class CalculadoraCientifica implements Calculadora {
    @Override
    public double somar(int valor1, int valor2) {
        return valor1+valor2;
    }
}Boa tarde Marcio.
O conceito de herança é uma classe filha herdar atributos e comportamentos da classe mãe.
O polimorfismo na herança é a capacidade de um objeto de classes filhas poderem ser referenciados pela classe mãe.
Não é a única forma, conforme dito acima. Há também classes que implementam interfaces, e objetos dessas classes podem ser referenciados pelas interfaces que elas implementam.
Polimorfismo é uma mudança de comportamento em classes descendentes, sendo que o comportamento inicial não necessariamente precisa estar definido.
Obrigado a todos pelas explicações.