domingo, 15 de marzo de 2015

Herencia en Java

La herencia en Java es un mecanismo que nos evita tener que duplicar código en determinadas ocasiones en las que tenemos que realizar clases con tareas muy similares entre sí.

Este mecanismo de herencia nos permite definir una clase a partir de otra, esto nos ofrece poder usar los métodos de esa clase y sus atributos sin necesidad de duplicar el código. Un ejemplo donde se usa herencia y que veremos en el apartado Crear Juego en Java desde 0 es en los juegos donde por ejemplo podremos tener
una clase que sea personajes. En lugar de crear una clase personajes buenos, personajes malos, etc. Lo que haremos será crear una clase personajes con atributos comunes y de ahí heredaran las clases buenos y malos dándoles sus características específicas evitando así esas duplicidades de código. En cualquier aplicación o juego de cierta entidad el uso de la herencia es muy importante y cómo hemos dicho en el apartado Crear Juego en Java desde 0 podremos ver muy pronto ejemplos de su uso.

Al usar la herencia en Java tenemos superclases y subclases. Las superclases son las clases que son extendidas por otras, también se llaman clases padre/madre. La subclases por tanto son las clases que extienden a otras y heredan todos los campos y métodos de su superclase, también se llaman clases hijas/hijos.

Todas estas clases cuando hablamos de herencia en Java y hay una vinculación clara entre ellas nos permite hablar de lo que sería una jerarquía de herencia donde vemos que hay unas superclases que son extendidas por sus correspondientes subclases.

A la hora de crear una Superclase no tenemos que hacer nada, una superclase puede ser cualquier clase que queramos, lo único que la diferencia de una clase que no es superclase es que ella es extendida por otras clases.

A la hora de crear una Subclase si hay diferencia con las otras clases aunque no mucha, la única diferencia es que usa la palabra lave extends para indicar que extiende la superclase correspondiente.

Por ejemplo tenemos la siguiente clase:


public class Personaje
{
public int altura;
public int fuerza;
public int velocidad;

...
}

Para crear una subclase de ella y que extienda Personaje y le añada un nuevo campo sería así:

public class PersonajeBueno extends Personaje
{
public int nivel;

...
}

Cómo vemos en la subclase se omiten los campos de la superclase pero aún así puede seguir usándolos, sólo añadimos lo que queramos y listo, podremos hacer uso de lo que tiene la superclase y de lo que hemos añadido.

En ocasiones podemos necesitar cambiar un método o un constructor de la superclase en la nueva subclase, eso lo podemos hacer con la sobreescritura y podremos usarlo con las modificaciones realizadas sin problemas.

Así sin ejemplos completos quizás resulta un poco complejo entender el concepto de herencia por eso estad atentos al apartado Crear Juego en Java desde 0 donde podremos ver cómo crear un juego desde 0 en el que os quedará mas claro cómo se usa y las ventajas que nos ofrece la herencia.

En Bluej podemos ver el uso de la herencia de una forma fácil ya que lo representa mediante flechas. En esta imagen lo podemos ver, es del diagrama de clases del Space Invaders del que hablo en esta entrada: http://www.juegosoftware.com/2014/12/space-invaders-en-java-con-bluej.html

Herencia y Uso en un diagrama de clases
Diagrama de Clases en Java donde
podemos ver cómo unas clases hacen uso
de otras y también existe la herencia
Aquí vemos que tenemos la clase Disparo y Nave que son 2 superclases y que cada una de ella tiene 2 subclases, la flecha con línea continua nos apunta cual es la superclase y que por tanto estamos haciendo uso de la herencia, las clases de donde sale la flecha continua son las que heredan. Las líneas discontínuas son de uso, nada tienen que ver con la herencia, nos indican que las clases apuntadas con línea discontinua son usadas por la clase de donde sale la flecha que en este caso no se ve.

Cualquier cosa no dudéis en preguntarlo o decirlo en los comentarios ;)

No hay comentarios:

Publicar un comentario