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.

java herencia

 

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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");
    }
    
}
1
2
3
4
5
6
7
8
9
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.

1
2
3
4
5
6
7
8
9
10
11
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.

1
2
3
4
5
@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.

java herencia limitaciones

El uso de java Herencia es muy útil como característica del lenguaje pero a veces hay que tener en cuenta sus limitaciones .

Publicado (fuente y derechos – foto-) por: www.arquitecturajava.com