Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Sobrescritura de Métodos en Java: Personalizando el Comportamiento de la Superclase

Cuando una subclase hereda un método de su superclase, puede sobrescribirlo (override) para proporcionar una implementación específica, siempre que el método no sea final.

El beneficio: definir un comportamiento específico al tipo de la subclase, manteniendo la misma firma.

Ejemplo Básico: Polimorfismo en Tiempo de Ejecución

class Animal {
    public void move() {
        System.out.println("Los animales se mueven");
    }
}

class Dog extends Animal {
    public void move() {
        System.out.println("Los perros caminan y corren");
    }
}

public class TestDog {
    public static void main(String args[]) {
        Animal a = new Animal(); // referencia Animal, objeto Animal
        Animal b = new Dog();    // referencia Animal, objeto Dog

        a.move(); // ejecuta Animal.move()
        b.move(); // ejecuta Dog.move() — polimorfismo
    }
}

Salida:

Los animales se mueven
Los perros caminan y corren

En tiempo de compilación se verifica el tipo de referencia (Animal tiene move()). En tiempo de ejecución, la JVM invoca el método del objeto real (Dog).

Error Común: Métodos Exclusivos de la Subclase

class Dog extends Animal {
    public void move() { ... }
    public void bark() { System.out.println("Los perros ladran"); }
}

public class TestDog {
    public static void main(String args[]) {
        Animal b = new Dog();
        b.move();  // OK
        b.bark();  // ERROR DE COMPILACIÓN: Animal no tiene bark()
    }
}

La referencia Animal no conoce bark(). Para usarlo, haz ((Dog) b).bark() o usa referencia Dog.

Reglas para la Sobrescritura Correcta

  1. Lista de argumentos idéntica a la del método sobrescrito.
  2. Tipo de retorno igual o subtipo (covarianza de retorno, Java 5+).
  3. Nivel de acceso no más restrictivo (ej. si superclase es public, subclase no puede ser private ni protected).
  4. Solo métodos de instancia heredados pueden sobrescribirse.
  5. Métodos final no pueden sobrescribirse.
  6. Métodos static no se sobrescriben (se ocultan / re-declaran).
  7. Si no se hereda, no se puede sobrescribir.
  8. En mismo paquete: puede sobrescribir cualquier método no private ni final.
  9. En paquete distinto: solo métodos public o protected no final.
  10. Excepciones: Puede lanzar excepciones no verificadas (unchecked) libremente. Para verificadas (checked): no puede lanzar nuevas ni más amplias que las del método original; puede lanzar menos o más específicas.
  11. Los constructores no se sobrescriben.

Uso de super para Invocar la Versión de la Superclase

Dentro del método sobrescrito, super.metodo() llama a la implementación padre.

Ejemplo

class Animal {
    public void move() {
        System.out.println("Los animales se mueven");
    }
}

class Dog extends Animal {
    public void move() {
        super.move(); // llama a Animal.move()
        System.out.println("Los perros caminan y corren");
    }
}

public class TestDog {
    public static void main(String args[]) {
        Animal b = new Dog();
        b.move();
    }
}

Salida:

Los animales se mueven
Los perros caminan y corren

Resumen: Sobrescritura vs Sobrecarga

CaracterísticaSobrescritura (Override)Sobrecarga (Overload)
RelaciónSuperclase ↔ SubclaseMisma clase
Nombre del métodoIgualIgual
ParámetrosIgualesDiferentes
RetornoIgual o covarianzaPuede variar
AccesoNo más restrictivoCualquiera
PolimorfismoEn tiempo de ejecuciónEn tiempo de compilación

Java

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  3. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  4. Método Java String length(): Cómo obtener el tamaño de un String (Ejemplo)
  5. Dominando Java String.indexOf(): Localizar subcadenas y ejemplos prácticos
  6. Entendiendo Java String.charAt(): Sintaxis, tipo de retorno, excepciones y ejemplo práctico
  7. Dominando el método compareTo() de Java String: Sintaxis, casos de uso y ejemplos prácticos
  8. Método Java String.contains(): Cómo comprobar subcadenas – Ejemplos prácticos
  9. Dominando Java String.endsWith(): Cómo comprobar sufijos de cadena con ejemplos
  10. Dominando el reemplazo de Strings en Java: replace(), replaceAll() y replaceFirst() explicados
  11. Java Static explicado: Variables, métodos y bloques – Ejemplos prácticos