Overload Y Overwrite

Overload(sobrecarga) y overwrite (sobreescritura

En Java, la sobrecarga y la sobreescritura son dos conceptos fundamentales de la programación orientada a objetos, que permiten que una clase utilice métodos de manera más flexible y reutilizable. A continuación, explico detalladamente qué son, cómo se utilizan y las diferencias entre ambos conceptos.


1. Sobrecarga de Métodos (Method Overloading)

La sobrecarga de métodos se refiere a la capacidad de una clase para tener múltiples métodos con el mismo nombre pero con diferentes parámetros. Los métodos sobrecargados deben diferir en el número de parámetros, el tipo de parámetros o ambos. La sobrecarga ocurre en tiempo de compilación.

Características de la sobrecarga de métodos:

  • Los métodos deben tener el mismo nombre.
  • Los métodos deben diferir en el número de parámetros o en los tipos de parámetros (por ejemplo, tipos diferentes o el orden de los parámetros).
  • La sobrecarga es resuelta en tiempo de compilación.
  • La firma del método (nombre del método y parámetros) debe ser única dentro de la misma clase.

Ejemplo de Sobrecarga de Métodos:

public class Calculadora {

    // Método para sumar dos enteros
    public int sumar(int a, int b) {
        return a + b;
    }

    // Método sobrecargado para sumar tres enteros
    public int sumar(int a, int b, int c) {
        return a + b + c;
    }

    // Método sobrecargado para sumar dos números de tipo double
    public double sumar(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        Calculadora calc = new Calculadora();

        System.out.println("Suma de 2 enteros: " + calc.sumar(5, 3));        // 8
        System.out.println("Suma de 3 enteros: " + calc.sumar(5, 3, 2));     // 10
        System.out.println("Suma de 2 doubles: " + calc.sumar(5.5, 3.2));   // 8.7
    }
}

Salida esperada:

Suma de 2 enteros: 8
Suma de 3 enteros: 10
Suma de 2 doubles: 8.7

En este ejemplo, la clase Calculadora tiene tres métodos sumar que realizan la misma operación (suma), pero con diferentes parámetros:

  • El primer método acepta dos enteros.
  • El segundo acepta tres enteros.
  • El tercero acepta dos números de tipo double.

La sobrecarga permite a la clase utilizar el mismo nombre de método, pero con diferentes entradas.

¿Cuándo utilizar la sobrecarga de métodos?

  • Cuando deseas ofrecer múltiples formas de realizar una operación similar (en este caso, sumar) con diferentes tipos o cantidades de datos.
  • Cuando quieres mejorar la legibilidad del código, evitando usar diferentes nombres para métodos que realizan tareas similares.

2. Sobreescritura de Métodos (Method Overriding)

La sobreescritura de métodos ocurre cuando una subclase proporciona una implementación específica de un método que ya está definido en su superclase. En este caso, el método de la subclase tiene el mismo nombre, tipo de retorno y parámetros que el método de la superclase, pero se redefine para proporcionar un comportamiento más específico o diferente.

Características de la sobreescritura de métodos:

  • La firma del método (nombre del método, tipo de retorno y parámetros) debe ser la misma que en la clase base.
  • La sobreescritura ocurre en tiempo de ejecución.
  • El método sobreescrito en la subclase debe tener el mismo o mayor nivel de acceso que el método de la clase base.
  • La sobreescritura permite que las subclases proporcionen una implementación personalizada de los métodos de la superclase.

Ejemplo de Sobreescritura de Métodos:

// Clase base (superclase)
class Animal {
    // Método que será sobreescrito
    public void hacerSonido() {
        System.out.println("El animal hace un sonido.");
    }
}

// Subclase que sobreescribe el método de la superclase
class Perro extends Animal {
    // Sobreescritura del método hacerSonido()
    @Override
    public void hacerSonido() {
        System.out.println("El perro ladra.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.hacerSonido();  // Salida: El animal hace un sonido.

        Perro perro = new Perro();
        perro.hacerSonido();   // Salida: El perro ladra.
    }
}

Salida esperada:

El animal hace un sonido.
El perro ladra.

En este ejemplo:

  • Animal tiene un método hacerSonido() que imprime “El animal hace un sonido”.
  • Perro es una subclase de Animal que sobreescribe el método hacerSonido() para imprimir “El perro ladra”.
  • La subclase Perro proporciona su propia versión del método que estaba definido en la clase base Animal.

¿Cuándo utilizar la sobreescritura de métodos?

  • Cuando deseas que una subclase implemente un comportamiento específico para un método que ya está definido en la superclase, pero con un comportamiento diferente.
  • Es útil para lograr el polimorfismo en Java, donde una instancia de la subclase puede reemplazar el comportamiento de la superclase.

Diferencias Clave entre Sobrecarga y Sobreescritura de Métodos:

Característica Sobrecarga de Métodos (Overloading) Sobreescritura de Métodos (Overriding)
Número de métodos Un método puede tener el mismo nombre pero diferente número o tipo de parámetros. El método en la subclase debe tener la misma firma (nombre, tipo de retorno, y parámetros).
Relación entre clases No requiere ninguna relación de herencia. Requiere que la subclase herede de la superclase.
Resuelto en Tiempo de compilación. Tiempo de ejecución.
Comportamiento Permite que un método realice diferentes funciones según los parámetros. Permite que una subclase modifique el comportamiento de un método heredado.
Acceso al método El método sobrecargado puede ser accedido por el mismo nombre con diferentes parámetros. El método sobreescrito reemplaza la implementación del método de la superclase.
Uso de la palabra clave No se usa @Override. Se usa la anotación @Override para indicar explícitamente que un método está sobreescribiendo uno de la superclase.