Herencia en Java

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