Continuamos otro lunes más con una entrega del curso de Java. Si recordáis, en la pasada entrega nos adentramos en la explicación del tema de la herencia en clases en Java.
Como bien citaba en esa entrega, se trato de algo muy útil, ya que nos hace evitar tener que escribir y repetir código muchas veces, sobre todo si se trata de clases muy complejas.
En esta entrega continuaremos con la herencia, pero daremos un paso más. Hablaremos sobre la redifinición de operaciones y la herencia en los constructores, es decir, muchos de vosotros, después de la entrega anterior, os preguntaríais qué pasa con los parámetros del constructor de la superclase. No os preocupéis, que en breve lo vais a ver.
Redefiniendo operaciones
Una subclase puede redefinir (“override”) una operación en lugar de heredarla directamente.
En muchas ocasiones (no siempre) la operación redefinida invoca la de la superclase.
- Se usa para ello la palabra super.
- Se refiere a la superclase del objeto actual.
Invocación del constructor de la superclase:
super(parámetros…);
Invocación de un método de la superclase:
super.nombreMétodo(parametros…);
Herencia y constructores
Los constructores no se heredan
- Las subclases deben definir su propio constructor.
Normalmente será necesario inicializar los atributos de la superclase.
- Para ello se llama a su constructor desde la subclase.
- La llamada a “super” debe ser la primera instrucción del constructor de la subclase.
Si desde un constructor de una subclase no se llama expresamente al de la superclase:
- El compilador añade la llamada al constructor sin parámetros.
- En el caso de que la superclase no tenga un constructor sin parámetros se produciría un error de compilación.
Que mejor manera de asimilación de las explicaciones anteriores que con un ejemplo detallado.
Ejemplo: constructores y redefinición de operaciones
Modificamos la clase Vehículo para añadir un constructor y un método que retorna en un String los datos del objeto.
Más adelante explicaremos porque llamamos al último método toString().
Vamos con el código de la superclase.
Hay algunos métodos que son iguales a los del ejemplo del volumen anterior, como he indicado. Aquí se añaden el toString() y el constructor que luego utilizaremos en alguna clase que herede de ésta.
Vamos con una subclase, por ejemplo Coche.
Como véis, en el constructor de la clase Coche también es necesario llamar al constructor de la clase con super y los parámetros necesarios. Como podéis observar, en los métodos de la superclase no es necesario tocarlos ni modificarlos, a no ser que sea necesario.
Ahora os vamos a explicar cómo hacerlo de una manera muy fácil y rápida en NetBeans, crearemos atributos y constructores con varios clics de ratón tecleando muy poquito código.
Abrimos NetBeans con el proyecto, paquete y clase creada.
Entre los corchetes de la clase, hacemos click derecho y pinchamos en Insert Code
A continuación elegimos lo que queremos generar, en un primer momento meteremos los atributos (Nombre, marca del coche, fecha de fabricación etc), pinchamos en ADD PROPERTY
Ahora nos aparecerá la siguiente pantalla:
– Pondremos el nombre del atributo «nombre», el tipo del atributo… String, int, double etc, si pinchamos en la flecha podremos ver todos los tipos que queramos.
– Elegimos permisos private y generamos el getter and setter
Aquí podéis ver el resultado:
Otro ejemplo ahora usando un int
Si necesitamos un tipo que no está en los predefinidos, como GregorianCalendar para las fechas, simplemente lo escribimos a mano:
A continuación (en todos los escenarios) pulsamos ok, si hemos metido un tipo como GregorianCalendar nos saldrá error de compilación como podéis ver en la siguiente captura:
¿Sabéis cómo solucionarlo? Muy fácil… click derecho Fix Imports
Ahora procedemos a crear un constructor…click derecho justo después del corchete de la clase y pinchamos en Insert Code, Constructor
Ahora procedemos a elegir los atributos que queremos en el constructor…o dejarlo vacío.
Y pinchamos en Generate, nos saldrá lo siguiente:
Si queremos algún atributo de una clase superior, lo deberemos meter a mano como en los ejemplos anteriores con super() y pasandole parámetro.
Para crear el toString nos vamos abajo del todo, justo antes del cochete final de la clase, pinchamos en Insert Code, toString y nos saldrá la siguiente pantalla donde elegiremos qué atributos queremos mostrar:
Y finalmente tendremos el código generado:
Hasta aquí esta entrega del curso de Java. Como véis la herencia es un tema muy extenso y que abarca muchos aspectos que hay que explicar y entender. Una vez lo entendamos, será muy útil a la hora de programar nuestra clases.
En el siguiente volumen seguiremos hablando de la herencia pero no directamente, sino que de un fenómeno que tendremos que utilizar: el polimorfismo.