Ordenador con código fuente rodeado de infinidad de objetos.

Sobrescribir métodos heredados en Java

Guía de programación en Java > Sobrescribir métodos heredados

Introducción

La sobrescritura de métodos permite modificar el comportamiento de un método heredado de una clase base en una clase derivada. En esta sesión, aprenderás qué significa sobrescribir métodos, por qué es útil y cómo implementarlo correctamente en tus programas.


¿Qué es Sobrescribir un Método?

Sobrescribir un método significa redefinir un método en una clase derivada que ya existe en su clase base. Cuando se sobrescribe un método, el nuevo método en la clase derivada reemplaza al método original de la clase base. Esto sucede siempre que sea llamado desde un objeto de la clase derivada.

Características principales:

  1. Debe tener el mismo nombre en la clase derivada que en la clase base.
  2. Debe tener los mismos parámetros: La lista de parámetros debe coincidir exactamente (nombre, tipo y orden).
  3. Relación de herencia: Solo puedes sobrescribir métodos de una clase base en una clase derivada.
  4. El acceso debe ser igual o más permisivo: Si el método original es public, el sobrescrito también debe ser public. Si el método original es protected podrías sobrescribirlo como protected o como public.

¿Por qué Sobrescribir Métodos?

La sobrescritura es útil porque permite personalizar o extender el comportamiento de los métodos heredados. Esto es especialmente útil cuando:

  • Quieres que las clases derivadas tengan un comportamiento específico para ciertas operaciones.
  • Deseas reutilizar el código base pero adaptarlo a casos particulares.

Ejemplo del mundo real:

Imagina que tienes una clase base llamada Animal con un método hacerSonido(). En una clase derivada como Perro, puedes sobrescribir hacerSonido() para que imprima «Guau» en lugar de un sonido genérico.


Cómo Sobrescribir un Método

Sintaxis básica en Java

Para sobrescribir un método, simplemente redefínelo en la clase derivada. Usa la anotación @Override para asegurarte de que realmente estás sobrescribiendo y no creando un nuevo método por error.

class Animal {
    void hacerSonido() {
        System.out.println("Sonido genérico de animal");
    }
}

class Perro extends Animal {
    @Override
    void hacerSonido() {
        System.out.println("Guau guau");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal miAnimal = new Animal();
        miAnimal.hacerSonido(); // Salida: Sonido genérico de animal

        Animal miPerro = new Perro();
        miPerro.hacerSonido(); // Salida: Guau guau
    }
}

Explicación:

  1. La clase Animal tiene un método hacerSonido() que imprime un mensaje genérico.
  2. La clase Perro sobrescribe hacerSonido() para proporcionar su propio comportamiento.
  3. Cuando llamas al método desde un objeto de tipo Perro, se usa el método sobrescrito.

Buenas Prácticas al Sobrescribir Métodos

  1. Usa la anotación @Override: Te ayuda a evitar errores tipográficos y asegura que realmente estás sobrescribiendo.
  2. Mantén la coherencia: Asegúrate de que el comportamiento del método sobrescrito tenga sentido en el contexto de la clase derivada.
  3. Llama al método de la clase base si es necesario: Puedes usar super.metodo() para incluir la funcionalidad de la clase base en el método sobrescrito.

Ejemplo con super:

class Animal {
    void hacerSonido() {
        System.out.println("Sonido genérico de animal");
    }
}

class Gato extends Animal {
    @Override
    void hacerSonido() {
        super.hacerSonido(); // Llama al método de la clase base
        System.out.println("Miau miau");
    }
}

public class Main {
    public static void main(String[] args) {
        Gato miGato = new Gato();
        miGato.hacerSonido();
    }
}

Salida:

Sonido genérico de animal
Miau miau


Sobrescritura vs Sobrecarga

Es común confundir estos dos conceptos. Aquí están las diferencias clave:

CaracterísticaSobrescrituraSobrecarga
HerenciaNecesariaNo necesaria
Nombre del métodoIgualIgual
ParámetrosIdénticosDiferentes
PropósitoCambiar comportamiento heredadoOfrecer varias versiones del método

Ejercicios Propuestos

  1. Crea una clase base Vehiculo con un método mover(). Luego, crea dos clases derivadas: Coche y Bicicleta. Sobrescribe el método mover() para que impriman «El coche se mueve» y «La bicicleta se mueve», respectivamente.
  2. Diseña una clase base Instrumento con un método tocar(). Crea clases derivadas como Guitarra y Piano que sobrescriban tocar() con mensajes específicos para cada instrumento.
  3. Usa la clase base Empleado con un método calcularSalario(). Crea clases derivadas como EmpleadoPorHora y EmpleadoFijo que sobrescriban calcularSalario() para calcular los salarios de manera diferente.

Resumen

  • Sobrescribir métodos permite personalizar el comportamiento heredado de una clase base.
  • Es esencial en la Programación Orientada a Objetos para crear sistemas flexibles y reutilizables.
  • Usa @Override para evitar errores y considera llamar a super.metodo() cuando sea necesario.

Con la práctica, dominarás la sobrescritura y podrás aprovechar al máximo el poder de la herencia en tus proyectos. ¡Manos a la obra! 🚀


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.