Se denomina polimorfismo a la capacidad que tienen objetos de diferentes clases de responder al mismo mensaje. Esto significa que puede haber muchos mensajes con el mismo nombre, en diferentes clases. Cada Clase responde al mensaje con su código propio (o método).
Espero tu respuesta y que la mia te sirva de ayuda.
No. Se habla de polimorfismo cuando el mismo método puede ser invocado con parámetros de distinto tipo o retornar un valor de distinto tipo. P.Ej:
class A { int valor; int sumar(int nuevo) { return valor + nuevo; } double sumar(double nuevo) { return (double)valor + nuevo; } }
Se dice que sobreescribes un método cuando cambias el código de un método ya existente (por ejemplo, una clase "hija" redefine un método de su clase "padre"). P.Ej:
class B : public A { double valorAcumulado; double sumar(double nuevo) { valorAcumulado += nuevo; return valorAcumulado }; }
Sobrecarga de metodos es poner el mismo nombre de metodo, pero con parametros distintos (distinto tipo o distinto numero de parámetros o ambas cosas a la vez)
Sobreescribir un metodo es cuando una clase hija define exactamente el mismo metodo que la clase padre.
Polimorfismo es cuando se mete una clase hija en un sitio que admite una clase padre y llamando a un metodo de la clase padre, en realidad se ejecuta el de la clase hija. Por ejemplo, imagina ClasePadre y una ClaseHija que hereda de ella. Ambas tienen metodo() (La ClaseHija lo sobreescribe). Si haces esto
ClasePadre a = new ClaseHija();
a.metodo();
se ejecuta el metodo() de ClaseHija, a pesar de que el tipo de a es ClasePadre. Esto es el polimorfismo, ejecutar un metodo() de ClaseHija cuando tu codigo "piensa" que tiene una ClasePadre.
Esto último, como comenta vigilanteIBM, permite que un codigo que trata con ClasePadre pueda ser usado sin modificaciones para varias ClaseHIja distintas.