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