Java permite la sobreescritura de funciones o métodos. Esto se enmarca dentro de la herencia, que a su vez forma parte de la programación orientada a objetos (POO) en este lenguaje.
De hecho, la sobreescritura de métodos es una de las formas en que se aborda el polimorfismo en Java. Para que sea posible es necesario que haya una clase principal con métodos definidos que serán heredados por las subclases.
La sobreescritura en Java también es conocida con el nombre de polimorfismo de inclusión y no es otra cosa que una característica que permite a las clases secundarias o subclases hacer una implementación de un método que ha sido dado por una clase principal o superclase.
Si se crea un objeto de la clase principal y se invoca el método, se va a ejecutar el código que tiene este en esa clase, pero si se crea un objeto de la subclase y se invoca el método, se ejecuta la versión del método en esta subclase.
Cuando se hace sobreescritura de un método en Java, se usa la anotación @Override que le indicará al compilador que se trata de un método que está en la clase principal y se sobreescribirá en ese momento.
El siguiente ejemplo muestra una idea general de cómo funciona esto en la práctica:
class Empleado { //clase general
public static int base = 400;
int salario() {
return base;
}
}
class Gerente extends Empleado { //aquí estamos sobreescribiendo el método de la clase principal
@Override
int salario() {
return base + 200;
}
}
class Supervisor extends Empleado {
@Override
int salario() {
return base + 100;
}
}
class Main { // con esto vamos a imprimir el salario de cualquier trabajador
static void imprimirSalario(Empleado Empleado) {
System.out.println(Empleado.salario());
}
public static void main(String[] args) {
Empleado Gerente = new Gerente();
System.out.println("El salario del gerente es: ");
imprimirSalario(Gerente);
Empleado Supervisor = new Supervisor();
System.out.println("El salario del supervisor es: ");
imprimirSalario(Supervisor);
Empleado Empleado1 = new Empleado();
System.out.println("El salario del empleado es: ");
imprimirSalario(Empleado1);
}
En la programación orientada a objetos (POO), la sobreescritura logra que una clase padre pueda enunciar una serie de métodos que serán comunes a todas las clases derivadas, pudiendo estas implementar el funcionamiento de estos de manera particular.
El propósito de realizar este proceso es extender la funcionalidad que tiene un método en una clase específica y adaptarlo a las necesidades de ese módulo en particular.
Para que funcione adecuadamente, la sobreescritura de métodos en Java debe cumplir con las siguientes condiciones:
Entonces, la sobreescritura en Java le proporciona al programador la posibilidad de darle mayor flexibilidad a un método según las necesidades que tenga la aplicación que esté desarrollando.