Hablar de Java Herencia y sus limitaciones es muy común cuando nos disponemos a preparar una certificación de Java como la de programador. La mayor parte de los desarrolladores piensa que cuando heredamos o extendemos de una clase se hereda todo.
Sin embargo esto no es así , existen una serie de limitaciones. Vamos a ver algunos ejemplos que nos ayuden a clarificar. Para ello vamos a utilizar la clase Persona y la clase Deportista.
package com.arquitecturajava.ejemplo1; public class Persona { private String nombre; private int edad; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } public Persona(String nombre, int edad) { super(); this.nombre = nombre; this.edad = edad; } public void andar() { System.out.println(getNombre()+"anda"); } void correr() { System.out.println(getNombre()+"corre"); } }
package com.arquitecturajava.ejemplo2; import com.arquitecturajava.ejemplo1.Persona; public class Deportista extends Persona { }
Java Herencia
Rápidamente nos daremos cuenta que el código ni siquiera compila y eso que el ejemplo parece muy sencillo. Esto es debido a que los constructores no se heredan y nos veremos obligados a generar nuestro propio constructor que delega en el constructor de Persona.
package com.arquitecturajava.ejemplo2; import com.arquitecturajava.ejemplo1.Persona; public class Deportista extends Persona { public Deportista(String nombre, int edad) { super(nombre, edad); } }
El código nos compila, es momento de sobreescribir el método correr de la clase Persona en el Deportista ya que este corre más rápido.
@Override public void correr() { System.out.println(getNombre()+" corre mas rapido"); }
El código no compila. Esto es debido a que solo se heredan los métodos que tienen visibilidad publica y los métodos de visibilidad default en el caso de que ambas clases estén en el mismo package . Por lo tanto ya podemos ver que las cosas no son como parecen. Los constructores no se heredan , los métodos que no son públicos tampoco salvo casos puntuales. ¿Existe alguna limitación más? sí , los métodos y variables privadas a los cuales no tendremos acceso.
El uso de java Herencia es muy útil como característica del lenguaje pero a veces hay que tener en cuenta sus limitaciones .
Otros artículos relacionados