HERENCIA PROGRAMACIÓN ORIENTADA A OBJETOS

La herencia es uno de los tres principios fundamentales de la programación orientada a objetos, porque permite la creación de clasificaciones jerárquicas. Con el uso de la herencia, se puede crear una clase general que defina características comunes a un conjunto de elementos relacionados. Esta clase puede ser heredada por otras clases mas especificas y cada una le agrega las características que le son única de ella.

Java soporta la herencia, con lo que permite que una clase incorpore a otra en su declaración.  Esto se hace utilizando la palabra clave extends, de modo que la subclase se agrega, es decir que extiende a la superclase. Pero que es una superclase y una subclase pues sencillo la superclase es la clase general o la clase "padre" y la subclase es una clase que hereda los metodos y atributos de la superclase.

comencemos con un ejemplo simple que ilustra muchas de las características clave de la herencia.

1) Una tienda de informática vende dos tipos de artículos (software y hardware) ambos caracterizados por su código (de tipo char) y su descripción. Además, en los productos software hay que indicar el tipo de producto (con una cadena), y en los hardware se debe indicar si es un periférico o no. 


a) Implemente las clases 
b) Realice un programa principal donde cree un objeto software y otro hardware.

Lo primero que crearemos es la superclase Artículos que va a tener como atributos el código y la descripcion de los articulos (software y hardware), y tambien tendrá los métodos necesarios.



public class Articulos {

// Atributos de la superclase
private char codigo;
private String descripcion;

// constructor de la superclase
public Articulos(char codigo, String descripcion) {
this.codigo = codigo;
this.descripcion = descripcion;
}

// Metodos de la superclase
public char getCodigo() {
return codigo;
}
public void setCodigo(char codigo) {
this.codigo = codigo;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
}

Ahora crearemos la clase Software que heredará de la clase Articulo sus atributos y sus métodos pero ademas tendrá un nuevo atributo llamado tipo.

public class Software extends Articulos {
private String tipo;

public Software(char codigo, String descripcion, String tipo) {
super(codigo, descripcion); // aqui se llama el constructor de la superclase
this.tipo = tipo;
}

public String getTipo() {
return tipo;
}

public void setTipo(String tipo) {
this.tipo = tipo;
}

}


Mas adelante les explicaré para que utilizo la palabra super. 

Vamos ahora a crear la clase Hardware que también hereda de la superclase Articulo sus atributos y métodos pero ademas tendrá un nuevo atributo periférico.

public class Hardware extends Articulos {
private String periferico;

public Hardware(char codigo, String descripcion, String periferico) {
super(codigo, descripcion); // aqui se llama el constructor de la superclase
this.periferico= periferico;
}

public String getPeriferico() {
return periferico;
}

public void setPeriferico(String periferico) {
this.periferico= periferico;
}

}

Ahora seguiremos a crear el programa principal donde crearemos los objetos tipo Hardware y sofware.

public class Main {

public static void main(String[] args) {

                Software  articulo1 = new Software ('B', "software Portable", "ProgramaJuegos");
                Hardtware  articulo2 = new Hardware ('A', "pantalla", "si");
             
System.out.println ("PRODUCTOS");
             
                System.out.println ("SOFTWARE");
System.out.println ("Codigo del Software:"+articulo1.super.getCodigo());
System.out.println ("Descripcion:"+articulo1.super.getDescripcion());
System.out.println ("Tipo: "+articulo1.getTipo());
           
                System.out.println ("HARDWARE");
                System.out.println ("Codigo del Hardware:"+articulo2.super.getCodigo());
System.out.println ("Descripcion:"+articulo2.super.getDescripcion());
System.out.println ("Periferico: "+articulo2.getPeriferico());


}

}

Aquí hemos creado un objeto tipo Software y otro Tipo Hardware utilizando la herencia, si ejecutamos este programa la salida sería la siguiente.

PRODUCTOS

SOFTWARE
Codigo del Software: B
Descripcion: software Portable
Tipo: ProgramaJuegos

HARDWARE
Codigo del Hardtware: A
Descripcion: software Pantalla
Periferico: si

En este ejemplo pudimos ver bien claro lo que es la herencia, ahora les explicare que és y para que sirve la palabra super.

USO DE SUPER PARA LLAMAR CONSTRUCTORES DE SUPERCLASE

Una subclase puede llamar un constructor definido por su superclase utilizando la siguiente forma de super:

super ( lista de parámetros );

Aquí, lista de parámetros especifica cualquier parametro necesitado por el constructor en la superclase. Super() siempre debe ser la primera declaracion ejecutada dentro de un constructor de subclase.
En el ejemplo anterior vemos como las subclase Software y Hardware llaman a super() con los parámetros código y descripción. Así el constructor Articulo es llamado, e inicializa código y descripción utilizando estos valores.  Cualquier forma del constructor definida por la superclase puede ser llamada por super(). El constructor ejecutado será el primero al que correspondan los argumentos.

USO DE SUPER PARA ACCESO A MIEMBROS SUPERCLASE

Hay una segunda forma de super que actúa parecido a this, excepto que siempre se refiere a la superclase de la subclase en la cual es utilizado. Este uso tiene el siguiente formato general.

super.miembro

Aquí miembro puede ser cualquier método o una variable de instancia. Esta forma de super es mas aplicable a situaciones en las cuales los nombres de miembros de una subclase ocultan miembros con el mismo nombre en la subclase.

Gracias esto es todo, espero y les haya servido.


Previous
Next Post »