14/1/12

Herencia y Polimorfismo en Java

Muchas veces damos por sentado que todos en programación saben y aplican la “herencia” y el “polimorfismo”, si bien existe una amplia documentación al respecto; que los invito a buscar en la red, para entender los conceptos y su aplicación un ejemplo sencillo ayudaría mucho, es por esto que decidí escribir esta pequeña nota.

Bueno iniciemos, utilice el IDE que más le guste o si prefiere con un simple editor, por comodidad utilizare un IDE ( mis preferidos son Jdeveloper e SpringSource) pero como todos sabemos es indiferente cual se utilice.

Herencia

A) Creamos un proyecto en nuestro IDE, por ejemplo HerenciayPolimorfismo, tal como lo muestro en la siguiente imagen:



Este proyecto tiene tres clases:

  1. Herencia (clase principal)
  2. acepta
  3. concede

B) La Herencia en java permite que una clase reciba automáticamente las propiedades y los métodos de otra clase.

C) La clase “concede” tiene el siguiente código con un solo método:

package conceptos;
public class concede {
public void estoyEscribiendo(){
System.out.println("Escribo una nota");
}
}

D) Ahora vamos a la clase “acepta” que tiene el siguiente código:

package conceptos;
public class acepta extends concede {
}

La clase concede utiliza la palabra clave “extends” eso quiere decir que automáticamente la clase “acepta” recibe todo lo que le da la clase “concede”.

E) La clase principal crearemos una nueva instancia del tipo “acepta” y nuestra clase principal quedara de la siguiente manera:

package conceptos;
public class Herencia {
public static void main(String[] args) {
acepta herencia = new acepta();
herencia.estoyEscribiendo();
}
}
Si ustedes están realizando este ejemplo con algún IDE, notaran que al escribir “herencia.” tenemos disponible el método “estoyEscribiendo”, pero que sucede si la clase “acepta” no tienen ningún método?, la “magia” esta en la palabra “extends” que esta en “acepta” que le permite heredar de la clase “concede”.
En este caso la clase que proporciona el código es la super clase y la clase que hereda el código es la sub clase.

Al ejecutar(Run) la clase Herencia obtendremos el siguiente resultado:

Escribo una nota

Polimorfismo

Mediante el polimorfismo podemos variar las propiedades de un objeto que a heredado de otra clase, veamos esto siguiendo con nuestro código, añado las siguientes líneas :

package conceptos;
public class Herencia {
public static void main(String[] args) {
acepta herencia = new acepta();
concede herenciaDos = new concede();
herencia.estoyEscribiendo();
herenciaDos.estoyEscribiendo();
}
}
Al ejecutar el anterior código nos desplegara dos veces el mensaje:
Escribo una nota
Escribo una nota

Mediante el polimorfismo podemos hacer que la clase “acepta” que es la que extiende a todas las propiedades de “concede” pueda modificar aquello datos que recibe, en nuestro ejemplo haremos lo siguiente:

package conceptos;
public class acepta extends concede {
public void estoyEscribiendo(){
System.out.println("Tu también escribes una nota");
}
}

Este es un ejemplo claro de polimorfismo ya que la clase “acepta” esta heredando todo lo que tiene la clase “concede”, lo que realizamos en esta clase es añadir un polimorfismo y sobre escribir lo que heredamos, es decir tenemos “estoyEscribiendo” que hemos heredado pero estamos sobrescribiendo lo que he heredado, en pocas palabras estoy sobrescribiendo el método que he heredado cambiando el mensaje que voy a desplegar.

Para aclarar un poco mas la idea, voy a realizar un cambio en la clase “concede” de tal manera que quede de la siguiente manera:

package conceptos;
public class concede {
public void estoyEscribiendo(){
System.out.println("Escribo una nota");
}

public void estoyLeyendo(){
System.out.println("Leo un libro");
}
}

Como podrán apreciar he añadido un método mas a la clase concede y la clase principal quedara de la siguiente manera:

package conceptos;
public class Herencia {
public static void main(String[] args) {
acepta herencia = new acepta();
herencia.estoyEscribiendo();
herencia.estoyLeyendo();
}
}

El resultado de ejecutar el código será lo siguiente:

Tu también escribes una nota
Leo un libro

En este caso podemos comprobar como hemos heredado en la clase “acepta” el método “estoyLeyendo” ya que no existe este metodo en la clase “acepta” y hemos sobrescrito el método “estoyEscribiendo”.

Comprobamos por tanto como “acepta” lo que hace es heredar los métodos deja intacto el método “estoyLeyendo” pero modifica el “estoyEscribiendo” poniendo otro mensaje para desplegar.




Mira #AntesQueSeaTarde completo

Echa un vistazo al Tweet de @NatGeo_la: https://twitter.com/NatGeo_la/status/792908992661950464?s=09