EXES
CRÉDITOS
ÍNDICE DEL MANUAL
PRÓLOGO
EL LENGUAJE JAVA
BIBLIOGRAFÍA
EXES. LA COMPAÑÍA
 
Área de Programación y Desarrollo
  Curso de Introducción a Java
www.exes.es
Tel: 902 360 417
 Exes   Contactar 

4.4.6 La herencia en java

Java permite el empleo de la herencia, característica muy potente que permite definir una clase tomando como base a otra clase ya existente. Esto es una de las bases de la reutilización de código, en lugar de copiar y pegar.

En java, como ya vimos la herencia se especifica agregando la claúsula extends después del nombre de la clase. En la claúsula extends indicaremos el nombre de la clase base de la cuál queremos heredar.

Al heredar de una clase base heredaremos tanto los atributos como los métodos, mientras que los constructores son utilizados, pero no heredados.

Práctica:
  • Construyamos la clase Taxista.java con el siguiente código:
            public class Taxista extends Persona {
	            private int nLicencia;
	            public void setNLicencia(int num)
	            {
		            nLicencia = num;	
	            }
	            public int getLicencia()
	            {
		            return nLicencia;
	            }
            }
            
  • Y construyamos ArranqueTaxista.java:
            public class ArranqueTaxista {
                 public static void main (String arg[]){
	            Taxista tax1 = new Taxista();
	            tax1.setNombre("Luis");
	            tax1.setEdad(50);
	            System.out.println( tax1.getNombre());
	            System.out.println(tax1.getEdad());
                 }
            }
            
  • Ahora intentemos usar el constructor que existía en la clase Persona que recibia el nombre de la persona y vamos a usarlo para la clase Taxista. Para ello construyamos la clase ArranqueTaxista2.java:
            public class ArranqueTaxista2 {
                 public static void main (String arg[]){
	            Taxista tax1 = new Taxista("Jose");
	            tax1.setEdad(50);
	            System.out.println( tax1.getNombre());
	            System.out.println(tax1.getEdad());
	            System.out.println(tax1.getNLicencia());
                 }
            }
            
  • Se genera un error de compilación, debido a que los constructores no se heredan, sino que hay que definir nuestros propios constructores. Agreguemos en la clase Taxista los siguientes constructores:
	            public Taxista(int licencia)
	            {
		            super();
		            nLicencia = licencia;
	            }
	            public Taxista(String nombre,int licencia)
	            {
		            super(nombre);
		            nLicencia = licencia;
	            }
	         
  • Ahora si podremos compilar y ejecutar la clase ArranqueTaxista2. La llamada al método super indica que estamos llamando a un constructor de la clase base (pensemos que un Taxista antes que Taxista es Persona y por tanto tiene sentido llamar al constructor de Persona antes que al de Taxista). Además gracias al número de parámetros de la llamada a super podemos especificar cuál de los constructores de la clase base queremos llamar.

En java se pueden emplear dos palabras clave: this y super.

Como vimos en la introducción a la programación orientada a objetos this hace alusión a todo el objeto y super hace alusión a la parte heredada, por ello empleamos super para referenciar al constructor de la clase base.

Práctica:
  • Ahora vamos a agregar la función getNombre dentro de la clase Taxista, es decir, tenemos la misma función en Persona y en Taxista:
	            public String getNombre()
	            {
	                 return "Soy un taxista y me llamo: " + super.getNombre();
	            }
	         
  • Compilamos Taxista y ejecutamos ArranqueTaxista2. Veremos que el mensaje que aparece en pantalla demuestra que la función getNombre llamada es la de del tipo real del objeto construido, en este caso la de la clase derivada que es Taxista.
  • Tambien apreciamos que para acceder al atributo nombre es necesario acceder al método getNombre de la clase base (y por ello emplear super).

En java los atributos y métodos de la clase base pueden cambiar su modificador de visibilidad dentro de la clase derivada, la siguiente tabla recoge dichos cambios:

  Modificadores en la clase base
   public   private   protected   paquete 
 En la clase derivada 
 se transforman en 
 public   inaccesible   protected   paquete 

Inaccesible significa que a pesar de haber sido heredado, no hay permisos en la clase derivada para poder acceder a dicho elemento inaccesible, pero aún así se pueden llamar a métodos de la clase base que si pueden acceder y modificar al elemento.

Recordemos que protected significa que es private, pero que al heredar no se hace inaccesible, es decir que desde la clase derivada se puede acceder.

··> Ver todos los cursos
··> Si necesitas más información, contáctanos aquí
 
 
 
Sello de Calidad   Sello de Calidad
  EXES - C/ Albasanz, 14 Bis, 1-C. 28037 Madrid - Tel: 902 360 417 Fax: 902 931 305 - exes@exes.es