Sobrecarga vs. Sobre escritura: ¿cuál es la diferencia?
En el paradigma de la programación orientada a objetos existen un par de conceptos que parecen gemelos porque sus nombres son parecidos: la sobrecarga (el término por el que se hace referencia al "overloading") y la sobrescritura (el término por el que se hace referencia al "overriding"). Sin embargo, su funcionamiento es distinto. Los conceptos de sobrecarga y de sobrescritura son importantes y entenderlos adecuadamente, ya que pueden hacer que el código que escribamos esté más ordenado y flexible.
Ejemplo de Sobrecarga (Overloading)
Piensa en una calculadora. Siempre queremos que “sume”, pero no siempre sumamos lo mismo:
-
A veces sumamos dos números enteros: 2 + 3
-
Otras veces sumamos números decimales: 2.5 + 3.7
-
Incluso podemos sumar tres números a la vez: 1 + 2 + 3
En la vida real no inventamos un botón distinto para cada tipo de suma. Usamos siempre el botón “+”, pero la calculadora entiende qué hacer según los números que le demos.
Eso mismo pasa con la sobrecarga:
Es cuando una clase tiene varios métodos con el mismo nombre, pero que aceptan distintos tipos o cantidades de datos.
Ejemplo en Java:
class Calculadora {
int sumar(int a, int b) {
return a + b;
}
double sumar(double a, double b) {
return a + b;
}
int sumar(int a, int b, int c) {
return a + b + c;
}
}
Aquí tenemos tres métodos llamados sumar, pero cada uno funciona según la forma en que lo usemos.
Ejemplo de Sobrescritura (Overriding)
Ahora imagina una clase Animal que tiene un método llamado “hacer sonido”.
Todos los animales hacen algún sonido, pero no suenan igual:
-
El perro ladra: “Guau”
-
El gato maúlla: “Miau”
-
El pato grazna: “Cuac”
Eso es sobrescritura: cuando una clase hija reescribe el comportamiento de un método que hereda de su clase padre.
Ejemplo en Java:
class Animal {
void sonido() {
System.out.println("Sonido genérico");
}
}
class Perro extends Animal {
@Override
void sonido() {
System.out.println("Guau guau");
}
}
class Gato extends Animal {
@Override
void sonido() {
System.out.println("Miau");
}
}
Cuando el método sonido() se llama en un Animal, da un sonido genérico.
Pero si lo llamamos en un Perro o un Gato, cada uno responde a su manera.
Diferencias:
| Aspecto | Sobrecarga (Overloading) | Sobrescritura (Overriding) |
|---|---|---|
| ¿Dónde ocurre? | En la misma clase | Entre clase padre e hija |
| ¿Qué cambia? | La forma de llamar al método (parámetros) | El comportamiento del método heredado |
| Momento clave | Se decide en la compilación | Se decide en la ejecución |
| Ejemplo real | Una calculadora con distintas sumas | Animales que hacen distintos sonidos |
"Dominar la sobrecarga y la sobrescritura es dar un paso más allá de escribir código: es aprender a pensar como un verdadero arquitecto de software."
¿Cuál es su reacción?

