Sobes.tech
Junior

¿Cuándo se considera que un método ha sido sobrescrito (overriding)?

sobes.tech AI

Respuesta de la IA

Un método se considera sobrescrito cuando en una clase hija se declara un método con la misma firma (nombre del método, cantidad y tipos de parámetros en el mismo orden) que en la clase padre. Además:

  1. El método en la clase padre no debe estar declarado como final (o un modificador equivalente en otros lenguajes), que impida la sobrescritura.
  2. El nivel de acceso del método sobrescrito en la clase hija no puede ser más restrictivo que en la clase padre.
  3. El método sobrescrito puede devolver el mismo tipo que el método en la clase padre, o un tipo covariante (subtipo del tipo original).
  4. El método sobrescrito no puede lanzar excepciones que sean más generales (o incompatibles) que las excepciones declaradas en el método de la clase padre.
  5. Los métodos estáticos no pueden ser sobrescritos, solo ocultados (hidden).

Al llamar al método sobrescrito a través de una referencia a la clase padre, pero con un objeto de la clase hija, se ejecuta la versión del método de la clase hija (polimorfismo).

// Ejemplo en Java

class Parent {
    public void display() { // Método en la clase padre
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Este método no puede ser sobrescrito
}

class Child extends Parent {
    @Override // La anotación @Override ayuda al compilador a verificar que el método realmente se sobrescribe
    public void display() { // Método sobrescrito con la misma firma
        System.out.println("Child display");
    }
}