Introducción
Sobrescritura y sobrecarga son conceptos fundamentales en la programación Java. Son las formas de implementar polimorfismo en nuestros programas Java. El polimorfismo es uno de los conceptos de OOPS.

Cuando la firma del método (nombre y parámetros) es la misma en la superclase y la clase hija, se llama sobrescritura. Cuando dos o más métodos en la misma clase tienen el mismo nombre pero diferentes parámetros, se llama sobrecarga.
Comparación entre sobrescritura y sobrecarga
Overriding | Overloading |
---|---|
Implements “runtime polymorphism” | Implements “compile time polymorphism” |
The method call is determined at runtime based on the object type | The method call is determined at compile time |
Occurs between superclass and subclass | Occurs between the methods in the same class |
Have the same signature (name and method arguments) | Have the same name, but the parameters are different |
On error, the effect will be visible at runtime | On error, it can be caught at compile time |
Ejemplo de sobrescritura y sobrecarga
Aquí hay un ejemplo de sobrecarga y sobrescritura en un programa Java:
package com.journaldev.examples;
import java.util.Arrays;
public class Processor {
public void process(int i, int j) {
System.out.printf("Processing two integers:%d, %d", i, j);
}
public void process(int[] ints) {
System.out.println("Adding integer array:" + Arrays.toString(ints));
}
public void process(Object[] objs) {
System.out.println("Adding integer array:" + Arrays.toString(objs));
}
}
class MathProcessor extends Processor {
@Override
public void process(int i, int j) {
System.out.println("Sum of integers is " + (i + j));
}
@Override
public void process(int[] ints) {
int sum = 0;
for (int i : ints) {
sum += i;
}
System.out.println("Sum of integer array elements is " + sum);
}
}
Sobrescritura
El método process()
y los parámetros int i, int j
en Processor
son sobreescritos en la clase hija MathProcessor
. Línea 7 y línea 23:
public class Processor {
public void process(int i, int j) { /* ... */ }
}
/* ... */
class MathProcessor extends Processor {
@Override
public void process(int i, int j) { /* ... */ }
}
Y el método process()
y int[] ints
en Processor
también son sobreescritos en la clase hija. Línea 11 y línea 28:
public class Processor {
public void process(int[] ints) { /* ... */ }
}
/* ... */
class MathProcessor extends Processor {
@Override
public void process(Object[] objs) { /* ... */ }
}
Sobrecarga
El método process()
está sobrecargado en la clase Processor
. Líneas 7, 11 y 15:
public class Processor {
public void process(int i, int j) { /* ... */ }
public void process(int[] ints) { /* ... */ }
public void process(Object[] objs) { /* ... */ }
}
Conclusión
En este artículo, cubrimos la anulación y la sobrecarga en Java. La anulación ocurre cuando la firma del método es la misma en la superclase y la clase hija. La sobrecarga ocurre cuando dos o más métodos en la misma clase tienen el mismo nombre pero diferentes parámetros.
Source:
https://www.digitalocean.com/community/tutorials/overriding-vs-overloading-in-java