O polimorfismo é um dos pilares da programação orientada a objetos. O polimorfismo que significa “diferentes formas” consiste na capacidade atribuída a um objeto de ser uma instância de várias classes. No caso um objeto da classe pai pode ser instância de objeto de classes descendentes. Essa capacidade fornece ao programador maior flexibilidade, pois o tipo de objeto instanciado poderá ser definido apenas em tempo de execução. Isso permite, por exemplo, criar arrays que armazenem objetos de diferentes subclasses.
Vimos ainda nesse módulo o polimorfismo de inclusão que se materializa no código java por meio da sobrescrita de métodos herdados. Nesse caso, um método da subclasse terá exatamente a mesma assinatura do método herdado, porém com uma implementação diferente. No polimorfismo de sobrecarga, a subclasse poderá sobrecarregar métodos herdados. Os métodos sobrecarregados deverão necessariamente ter o mesmo nome do método herdado, mas obrigatoriamente com parâmetros diferentes. O tipo de valor de retorno poderá ou não ser diferente. Vimos que a sobrecarga de métodos é uma forma simples de tornar a classe mais flexível, bem como melhorar a usabilidade do código.