145.Redefinición de métodos [method overriding] (concepto)

Cuando un método cambia su contenido sin cambiar su signatura.

Ocurre cuando una clase B extiende a otra A y B tiene un método con la misma signatura que un método de A.

class Operacion

public class Operacion {

    public double aplica(double x) {

        return x;

    }

}

class Duplica extends Operacion

public class Duplica

        extends Operacion {

    @Override

    public double aplica(double x) {  // redefine el método

        return 2 * x;

    }

}        

class Suma extends Operacion

public class Suma

        extends Operacion {

    private double k;

 

    public Suma(double k) {

        this.k = k;

    }

 

    @Override

    public double aplica(double x) {  // redefine el método

        return x + k;

    }

}        

 

La anotación “@Override” le pide al compilador que verifique que eectivamente estamos redefiniendo un método de la superclase. Si por error (por ejemplo, si nos equivocamos en los parámetros) el método no redefine nada, el compilador lanza un error. Otro error frecuente es modificar la signatura de un método de una superclase y olvidar que hay que adaptar los métodos que lo redefinen. “@Override” detectaría el olvido.

Cuando se van a utilizar las clases derivadas, se aplica polimorfismo:

Operacion opA = new Operacion();

Operacion opB = new Duplica();

Operacion opC = new Suma(3);

opA.aplica(7);  // devuelve 7

opB.aplica(7);  // devuelve 14

opC.aplica(7);  // devuelve 10

 

Ver "Herencia".

En la subclase se pueden usar los métodos de la subclase y los métodos de la superclase, teniendo en cuenta que cuando un método de la superclase ha sido redefinido, el acceso directo es a la redefinición en la subclase. No obstante, todos los métodos de la superclase son accesibles por medio de "super".

Temas relacionados

Vademécum
ejemlo: polígono
ejemplo: colas de tamaño limitado