Herencia

Relaciones entre Clases

Antes de entrar de lleno a herencia, vamos a ver las relaciones entre las clases, pues resulta ser que aunque la herencia es la más útil, la más famosa y la que mas te va a importar no es la única.

Esta jerarquía de clasificación es  subjetiva, dependiendo de las intenciones con las que se pretenda trabajar. Es muy difícil establecer una relación perfecta y surgen elementos que no se acomodan en ninguna categoría.

Agregación / Composición

“todo – parte / tiene-un / parte-de”

Esta relación se presenta entre una clase TODO y una clase PARTE que es componente de TODO. La implementación de este tipo de relación se consigue definiendo como atributo un objeto de la otra clase que es parte-de.

Los objetos de la clase TODO son objetos contenedores. Un objeto contenedor es aquel que contiene otros objetos.

Tipos

  • Contenido Físico- Valor

El contenedor contiene el objeto en sí. Cuando creamos un objeto contenedor, se crean también automáticamente los contenidos.

  • Conceptual – Referencia

Se tienen punteros a objetos. No hay un acoplamiento fuerte. Los objetos se crean y se destruyen dinámicamente. La relación de agregación/composición establece jerarquías de clases por grado de composición.

El ejemplo más clásico de esto es el del motor y un auto:


Asociación

Es una relación entre clases. Implica una dependencia semántica. Son relaciones del tipo “pertenece a” o “está asociado con”. Se da cuando una clase usa a otra clase para realizar algo.


Herencia

viejo

¡Respeta a la Clase Padre!

La herencia es un mecanismo fundamental en la construcción de clases, necesario para reutilizar código. Mediante la herencia podemos crear clases nuevas a partir de otras que ya existen, sin necesidad de reescribir todo el código: mecanismo de reutilización de código.

Mediante la herencia podemos organizar las distintas clases en estructuras jerárquicas.

Algo especializado va a heredar de algo general, como un coche de un vehículo, o un loro de un ave. Esto se hace en programación porque se suelen tener muchas cosas en común pero no todas. 

Entonces lo que se hace es poner todas las características en común de los objetos en una clase “Padre” de la que todos va a heredar.

herencia1

Entonces al decirte a Java que es una clase hija, esta nueva clase ahora es capaz de acceder a todos los atributos, interfaces implementadas y todos los métodos que tiene su padre, siempre que sean públicos o protegidos.

Sintaxis

Para que Java sepa que una clase es hija se declara la clase de la siguiente manera:

public class ClaseHija extends ClasePadre{
   //Contenido de Clase
   ...
}

De este modo ahora ahora la clase hija se refería bajo esta nomblecaruta:

  • Super: Clase Padre
  • This: Clase Propia

Constructor de una Clase Hija

public class ClaseHija extends ClasePadre{                //Constructor
   public NombreClase(Tipo Algo1,Tipo Algo2,Tipo Algo3){
       Super(Algo1, Algo2)                                //Atributos Extendidos
       this.Algo3 = Algo3;                                //Atributos Unicos
   }
}

Recuerda que Super simpre tiene que ir al principio del Constructor.


Clases Abstractas

“¡Timmy! ¿Qué demonios es un objeto Vehículo marino? ¡Eso no existe! ¿Quién permitió que esto fuera posible de hacerse”

Para evitar que se puedan generar objetos de la clase padre si es que no se quiere, se tiene que añadir Abstract de esta manera lo que se hará es que para esta clase será imposible instanciar objetos.

public abstract class NombreDeClase{
   ...
}

Métodos Abstractos

Son necesarios crear algo así, déjame te explico:

NombreDeClasePadre Instancia = new NombreDeClaseHija();

Y que no den ningun error hay que implantar tener en cuenta que:

  • No se puede llamar a un método si no existe en la clase Padre a pesar de ser un objeto de la Clase Hija.
  • Si existe en ambos el mismo método se llama al de la Clase Hija.

Para cumplir esto es necesario crear clase abstractas que existan en el Padre, pero que no hagan nada, simplemente que obligan a las clases hijas a añadirlas.

public abstract NombreDeClase();


Herencia en Varios Niveles

Es posible en Java crear herencias en varios niveles, es decir que ahora la clase nieta es capaz de acceder a todos los atributos y todos los métodos que tiene su padre y su abuelo siempre que sean públicos o protegidos.

herencia2

Sintaxis:

public class ClaseAbuelo{
//Contenido de Clase
}
public class ClasePadre extends ClaseAbuelo{
//Contenido de Clase
}

public class ClaseNieta extends ClasePadre{
//Contenido de Clase
}

La  herencia es al final del día:

HERENCIA = TRANSMISIÓN + REDEFINICIÓN + ADICIÓN

Es decir, la herencia te permite TRANSMITIR todos los métodos y atributos de una clase padre a la mía, REDEFINIR varios métodos de la clase padre si así lo deseo  y AÑADIR más si requiero más.

 

btn1 btn
btn

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s