La herencia en Java es la manera en la que una clase adquiere los atributos y comportamiento de otra clase. De manera que esta nueva clase es una especialización de la original. Ahora veamos que quiere decir todo esto en español y con ejemplos.
¿Para que sirve la Herencia?
En ocasiones podemos vernos en la necesidad de crear objetos parecidos y con una estrecha relación entre si. Podría darse el caso de estemos creando un sistema en que debamos manejar el los ingresos de los empleados de una empresa. Entre todos los escenarios que debemos considerar al desarrollar dicho sistema podemos ver que no todos los empleados tiene el mismo tipo de ingresos.
Podemos observar en el diagrama de clases anterior que la mayoría de los componentes de la clase se duplican con excepción de que el objeto vendedor tiene un atributo mas llamado comisiones ya que este tipo de empleo además de su sueldo base obtiene pagos por cada venta que realiza y el atributo área en el Tipo Gerente. Como desarrolladores es nuestro trabajo observar las similitudes y poder simplificarlo lo más que se pueda.
En este ejemplo podemos ver dos objetos Gerente y Vendedor. Podríamos definir que ambos son empleados de la misma compañía ¿Cierto? Entonces podríamos re definirlo de la siguiente manera.
Ahora en el diagrama podemos ver como funciona la Herencia, ambos tipo de objetos Gerente y Vendedor heredan los atributos y métodos. ¿Qué quiere decir que Heredan los métodos y Atributos? Veámoslo en el código.
Video Ejemplo
Ejemplo de Herencia en Java
En el Código anterior podemos observar la palabra clave “extends” . Esta palabra nos sirve para indicar desde donde estamos heredando la funcionalidad. Este caso puede leerse como “Gerente extiende de empleado” o “Gerente hereda de empleado”. Siendo el mismo caso para Vendedor.
También podemos observar que el modificador en el caso de Empleado es protected. El cual es el apropiado para el acceso desde hijo. Y hemos implementado el método getCalculaSueldoMensual() simulando el descuento de los impuestos.
Veamos ahora su funcionamiento:
La salida seria la siguiente:
Sueldo neto: $750.0
Sueldo neto: $750.0
Ahora al crear un objeto de Gerente y de Vendedor tenemos acceso a todos los atributos y métodos de la clase Empleado.
Puedes notar un pequeño problema en el código anterior. El Tipo Vendedor tiene un ingreso extra que no se considero en el calcularSueldoMensual(). Para esto existe en Java sobreescritura de métodos.
Herencia y sobrescritura de métodos.
Existen ocasiones en la herencia en las que si bien necesitamos la misma respuesta (en este caso el sueldo final mensual) la manera de obtenerlo puede variar en cada tipo de Objeto. Para este caso la sobreescritura de métodos de la herencia en Java nos ayudara a resolverlo.
Para sobrescribir un método debemos en la clase hijo crear un método con el mismo nombre y parámetros de entrada deben ser los mismos del método padre.
Nuestra clase podría crear la de la siguiente manera:
Puedes notar la anotación override que nos sirve para identificar un método sobrescrito. No es obligatorio pero una buena practica escribirlo como ayuda en la documentación del código.
No es necesario cambiar nada del método Main para obtener ahora la respuesta correcta.
Salida:
Sueldo neto: $750.0
Sueldo neto: $1275.0
Prueba tus conocimientos
Conclusión
Ahora conoces el concepto de herencia en Java. Eres capaz de abstraer clases de una mejor manera, evitando la duplicidad de código. También sabes como sobrescribir un método para poder darle la funcionalidad especial necesaria.