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