La herencia es la capacidad que tienen los lenguajes orientados a objetos
para extender clases. Esto produce una nueva clase que hereda el
comportamiento y los atributos de la clase que ha sido extendida. La clase
original se denomina clase base o superclase, la nueva clase se denomina
clase derivada o subclase.
Extensiones
La capacidad para extender clases se llama herencia porque la nueva clase
hereda todos los atributos y los métodos de la superclase a la que extiende.
Una subclase es una especialización de la superclase. Normalmente una
subclase añade nuevos atributos y métodos que le dan un comportamiento
diferente al de la superclase. La herencia es un mecanismo muy importante
porque permite la reutilización del código.
//Código de la clase Vehiculo, que es una superclase
public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
//Constructor
public Vehiculo (String matricula, String marca, String modelo) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo; }
//Métodos
public String getMatricula () { return matricula; }
public String getMarca () { return marca; }
public String getModelo () { return modelo; }
} //Cierre de la clase
Ahora veremos cómo funciona una subclase, en este caso, Turismo:
//Código de la clase Turismo, subclase de la clase Vehiculo
public class Turismo extends Vehiculo {
//Campos específicos de la subclase.
private String IdTurismo;
//Constructor de la subclase: incluimos como parámetros al menos los del constructor de la superclase
public Turismo (String matricula, String marca, String modelo) {
super(matricula, marca, modelo); //Con la palabra reservada 'super' cogemos los parámetros de la superclase
IdTurismo = "Unknown"; } //Cierre del constructor
//Métodos específicos de la subclase
public void setIdTurismo (String IdTurismo) { this.IdTurismo = IdTurismo; }
public String getIdTurismo () { return IdTurismo; }
public void mostrartodo() {
// marca = "Audi"; Si tratáramos de acceder directamente a un campo privado de la superclase, salta un error
// Sí que podemos acceder a variables de instancia a través de los métodos de acceso públicos de la superclase
System.out.println ("Vehículo con matrícula: " + getMatricula() + ". De la marca: " + getMarca() +
". Con el identificador: " + getIdTurismo() ); }
} //Cierre de la clase
Comprobamos que el sistemas de herencias en funciona:
//Testeo de código
public class TestHerencia1 {
public static void main (String [] Args) {
Turismo turismo1 = new Turismo ("76567MU", "Audi", "650E");
turismo1.setIdTurismo("Tur_2014_11_05");
turismo1.mostrartodo();}
} //Cierre de la clase
Si todo ha salido bien, nos debería salir el siguiente texto:
Vehículo con matrícula: 76567MU. De la marca: Audi. Con el identificador: Tur_2014_11_05