Tutorial JAVA (IX)


java10.jpg

En el capitulo numero dos, después de crear los get y set nos dimos cuenta que la clase quedaba mucho mas protegida. Cumplía uno de los requisitos de la programación orienta a objetos: la encapsulación.

Hicimos que la clase solo fuera accesible desde esos métodos y vimos que realmente ningún programador tiene porque saber que sucede dentro de nuestra clase, solo tiene que conocer los métodos para acceder a ella.

El hecho de que un programador no precise sabe como funciona una clase por dentro cumple con otro principio de la programación a objetos que es la abstracción.

Si hemos diseñado una clase llamada GuardaMercancia y le decimos al programador que le debe pasar la fecha, producto y cantidad y que la clase ya se encargara de serializar los datos, tiene más que suficiente.

No le interesa, ni le va a resolver ningún problema, saber como hacemos la conexión con la base de datos o que tipo de secuencia sql empleamos o cuantos métodos tiene la clase. No precisa saber nada, salvo que valores pasarle y que hace en líneas generales la clase. Debemos diseñar nuestra clase de forma que sea una caja negra. Esta es la abstracción.

Podríamos decir que la herencia es la piedra angular de la programación orientada a objetos porque permite la creación de clasificaciones jerárquicas. Mediante la herencia podemos crear una clase general que defina los rasgos comunes de una serie de objetos.

En Java una clase que es heredada se le denomina superclase, también llamada clase padre o clase base y la clase que hereda se llama subclase, también llamada clase hija o clase derivada. Una subclase hereda todos los atributos, variables y métodos de la superclase y añade los suyos propios. Podríamos decir que una subclase es una versión especializada o mejorada de una superclase.

Para heredar una clase simplemente debemos añadir a la definición de la clase la palabra reservada extends. Abramos el Eclipse y veamos un ejemplo sencillo. Crearemos un nuevo proyecto llamado ocho al que añadiremos tres clases: la clase ClaseA, la clase ClaseB y la clase TestAB en la que seleccionaremos la opción public static void main(String[] args). La idea del ejercicio es hacer que la clase ClaseB herede la ClaseA y lo podamos comprobar en la clase TestAB. Nuestro código más o menos seria el siguiente:

  1. public class ClaseA {
  2. int A1, A2;
  3. void VeoA1A2(){
  4. System.out.println("A1 y A2: " + A1 + " y " + A2);
  5. }
  6. }

En la ClaseA tenemos dos atributos que mostramos por consola. Como ya sabemos los atributos deberían ser privados y utilizar métodos get y set, pero en estos ejercicios solo nos centraremos en la herencia.

  1. public class ClaseB extends ClaseA{
  2. int B1;
  3. void VeoB1(){
  4. System.out.println("B1= " + B1);
  5. }
  6. void suma(){
  7. System.out.println("A1+A2+B1 =" + (A1+A2+B1));
  8. }
  9. }

La claseB hereda la ClaseA por tanto tiene sus atributos y métodos. Pero además incluye un método para mostrar el valor de su propio atributo y otro método para realizar una suma. Aquí podemos ver que las ClaseB es una especialización de la ClaseA, tiene toda la funcionalidad de la superclase y más.

  1. public class TestAB {
  2. public static void main(String[] args) {
  3. ClaseA SuperA=new ClaseA();
  4. ClaseB SubB=new ClaseB();
  5. //usamos la superclase
  6. SuperA.A1=15;
  7. SuperA.A2=25;
  8. System.out.println("Contenido de la superclase:");
  9. SuperA.VeoA1A2();
  10. System.out.println();
  11. //usamos la subclase
  12. //la subclase puede acceder a todos los miembros publicos de
  13. //la superclase
  14. SubB.A1=17;
  15. SubB.A2=23;
  16. SubB.B1=14;
  17. System.out.println("Contenido de la subclase:");
  18. SubB.VeoA1A2();
  19. SubB.VeoB1();
  20. System.out.println();
  21. System.out.println("Suma de A1, A2 y B1 en la subclase:");
  22. SubB.suma();
  23. }
  24. }
imagen.JPG

En esta clase creamos un objeto de la clase ClaseA y ClaseB. Podemos comprobamos como desde la subclase tenemos acceso a lo atributos y métodos públicos de la superclase, pero en cambio la superclase no ve ningún atributo ni método de la subclase.

En Java a diferencia de otros lenguajes como C++ solo se puede heredar de una sola superclase, en la plataforma .Net de Microsoft sucede lo mismo. También debemos tener en cuenta que una subclase puede ser una superclase de otra subclase.

El tema de la herencia acaba de comenzar y lo iremos desarrollando a medida que veamos más ejemplos.

Enlaces interesantes

  • Eclipse
  • Página oficial de Java en español





Opina sobre Tutorial JAVA (IX)

Nombre:

Tu email:

Página web (si tienes):

Opinar:

Escoge el recuadro negro: para evitar spam