Vamos a ver qué es esto de la Herencia de clases en Java.
¿Qué es la herencia de clases?
La herencia de clases es un mecanismo que permite a una clase heredar los atributos y métodos de otra clase. Esto permite reutilizar código y facilita la organización del mismo.
¿Cómo se implementa la herencia de clases?
La herencia de clases se implementa utilizando la palabra clave extends
. La subclase se declara después de la palabra clave extends
, seguida del nombre de la superclase.
Si la clase que se hereda tiene un constructor específico, se tendrá que implementar con la palabra clave super
.
Basándonos en la clase Vehicle
que ya tenemos, vamos a crear dos clases más: Car
y Truck
. Ambas heredarán todos los miembros de Vehicle
, ya que nos servirán como una base. Como el constructor de la clase Vehicle
requiere parámetros, tendremos que crear un constructor en nuestras nuevas clases, y con la palabra clave super
llamar al constructor de la clase que estamos heredando, en este caso Vehicle
. Le pasaremos al constructor los combustibles máximos para cada tipo. Nos debería quedar algo así:
Si vamos a Main
y probamos a instanciar Vehicle, nos pedirá el combustible, y veremos todos sus métodos.
Métodos de la clase Vehicle
En cambio, si instanciamos Car
, vemos cómo no nos pide nada el constructor (porque ya le hemos pasado ese valor en el constructor de Car
) y tendremos todos los miembros heredados de Vehicle
.
Métodos de la clase Car heredados de Vehicle
super
La palabra clave super
se utiliza para llamar métodos de la clase heredada desde la misma subclase.
Si desde el mismo constructor de Car
quisiéramos encender Vehicle
, podríamos llamar al método:
Sobreescribir métodos
Sobreescribir un método es redefinir un método heredado de una clase. Para sobreescribir un método, se debe declarar el método en la subclase con el mismo nombre, tipo de retorno y parámetros que el método heredado de la superclase. La subclase debe usar la anotación @Override
para indicar que está sobreescribiendo un método heredado.
Supongamos que Truck
, como es un vehículo más grande, queremos que gaste 5 más de combustible. Primero tendremos que hacer protected
el campo fuel
en Vehicle
para poder acceder desde la clase Truck
:
Ahora, con @Override
desde Truck
, podemos reescribir el método on()
de Vehicle
: