Sobrecarga
¿Qué es la sobrecarga de métodos?
En Java podemos tener métodos con el mismo nombre, pero con distinta lista de parámetros.
A esto se le llama sobrecarga de métodos (overloading).
Permite dar varias formas de usar un mismo método.
👉 Ejemplo de la vida real:
Si pides un café en una cafetería:
A veces dices: “un café” ☕
Otras veces dices: “un café con leche” ☕+🥛
Otras veces: “un café doble con leche”.
El método es el mismo: pedirCafé(), pero con parámetros distintos.
🔹 En nuestro ejemplo Empleado
Queremos calcular el salario:
Caso 1: cuando el empleado trabaja horas extra.
Caso 2: cuando no trabaja horas extra.
Podríamos obligar siempre a pasar un número, incluso 0. Pero con sobrecarga podemos dar dos formas más limpias:
// Con horas extra
public int calcularSalarioBase(int horaExtra) {
return salarioBase + (tasaHoraria * horaExtra);
}
// Sin horas extra
public int calcularSalarioBase() {
return calcularSalarioBase(0); // reusamos el otro método
}🔹 Clase completa con sobrecarga
public class Empleado {
private int salarioBase; // privado
private int tasaHoraria; // privado
// Constructor
public Empleado(int salarioBase, int tasaHoraria) {
setSalarioBase(salarioBase);
setTasaHoraria(tasaHoraria);
}
// Método con parámetro
public int calcularSalarioBase(int horaExtra) {
return salarioBase + (tasaHoraria * horaExtra);
}
// Método sobrecargado (sin parámetro)
public int calcularSalarioBase() {
return calcularSalarioBase(0);
}
// Setters privados → solo inicializamos desde el constructor
private void setSalarioBase(int salarioBase) {
if (salarioBase <= 0)
throw new IllegalArgumentException("Salario no puede ser menor que 0");
this.salarioBase = salarioBase;
}
private void setTasaHoraria(int tasaHoraria) {
if (tasaHoraria < 0)
throw new IllegalArgumentException("La tarifa por hora no puede ser negativa");
this.tasaHoraria = tasaHoraria;
}
// Getters públicos → para leer desde fuera
public int getSalarioBase() {
return salarioBase;
}
public int getTasaHoraria() {
return tasaHoraria;
}
// Método principal para probar
public static void main(String[] args) {
var e = new Empleado(1000, 20);
// Mostramos usando getters
System.out.println("Salario base: " + e.getSalarioBase());
System.out.println("Tarifa por hora: " + e.getTasaHoraria());
// Calculamos con horas extra
int conExtras = e.calcularSalarioBase(10);
System.out.println("Salario con 10 horas extra: " + conExtras);
// Calculamos sin horas extra (sobrecarga)
int sinExtras = e.calcularSalarioBase();
System.out.println("Salario sin horas extra: " + sinExtras);
}
}🔹 Resultado en consola
Salario base: 1000
Tarifa por hora: 20
Salario con 10 horas extra: 1200
Salario sin horas extra: 1000
Sobrecarga de métodos 🔁
Comparación ⚖️
| Aspecto | Sin sobrecarga ❌ | Con sobrecarga ✅ |
|---|---|---|
| Nombre del método | calcularSalarioBase(int horaExtra) |
calcularSalarioBase(int horaExtra) calcularSalarioBase() |
Uso en main |
e.calcularSalarioBase(0); |
e.calcularSalarioBase(); |
| Claridad del código | Menos legible: hay que pasar 0 explícito |
Más legible: no pasamos nada si no hay horas extra |
| Reutilización de lógica | Solo una forma de usarlo | El método sin parámetros llama al otro y reutiliza la lógica |
| Flexibilidad | Poca: siempre se exige un argumento | Alta: el mismo método funciona de dos maneras |