Para ilustrar el mecanismo de herencia en Java, vamos a suponer que disponemos de una clase Persona
con un nombre y una edad como atributos (además de constructores y métodos) y de ella vamos a heredar para crear una clase Programador
, que incorporará todos los elementos de su clase base (Persona
) y añadirá como atributo propio el lenguaje en que programa.
extends
, indicando a continuación de qué clase se hereda.super
. Se puede utilizar tanto en el constructor (para llamar al constructor de la clase padre y pasarle los parámetros que necesite) como desde cualquier otro método.@Override
. Esto no es obligatorio para que el programa compile, pero sí recomendable en términos de legibilidad. Además, si ponemos la anotación en un método que no exista en la clase padre, el compilador nos advertirá de ese error.Veamos todo esto en el ejemplo:
// Clase padre
public class Persona
{
// Atributos protegidos (por si se quiere acceder a ellos desde la clase hija o subclase)
protected String nombre;
protected int edad;
// Constructor
public Persona(String nombre, int edad)
{
this.nombre = nombre;
this.edad = edad;
}
// Método modificable en clases hijas
public string mostrar()
{
return nombre + ", " + edad + " años";
}
// Otros métodos: getters, setters, etc.
}
// Clase hija
public class Programador extends Persona
{
// Incorpora automáticamente todo lo de Persona, sólo define lo propio
// Atributos específicos de Programador
private String lenguaje;
// Constructor basado en el de la clase padre
public Programador(String nombre, int edad, String lenguaje)
{
super(nombre, edad);
this.lenguaje = lenguaje;
}
// Redefinición de métodos de la clase padre
@Override
public string mostrar()
{
return super.mostrar() + "\nPrograma en " + lenguaje;
}
}
En Java únicamente es posible definir herencia simple, es decir, que una clase sólo puede heredar de otra. Para "simular" la herencia múltiple se puede hacer uso de los interfaces. Consultar el apartado de Interfaces para más información.