La herencia es un claro ejemplo de cómo los humanos nos basamos en conceptos de la naturaleza para resolver problemas de la ingeniería. En la vida real, la herencia es el hecho de ceder atributos o posesiones de una persona a otra; en términos de programación, y en específico de la programación orientada a objetos, la herencia refiere al concepto de que una clase padre hereda a una clase hija sus atributos o funciones.
Además de las funciones y atributos heredados de la clase padre, las clases hijas pueden tener sus propios atributos e incluso definir sus propias funciones. También pueden convertirse en clases padre de otras clases hijas: es el ciclo sin fin.
La herencia en Java implica que una superclase o clase base hereda sus funciones y atributos a una subclase o clase derivada. La palabra reservada que nos permite realizar herencia entre clases es extends.
Cabe mencionar que en Java los constructores de las clases no se heredan; sin embargo, pueden ejecutarse en la clase hija con el método super().
Considera que las funciones o atributos del tipo private no podrán heredarse.
Una clase hija hereda de una clase padre.
En esta práctica se seguirán una serie de pasos con el fin de explicar como es que funciona la herencia simple, mecanismo por el cual una clase permite heredar las características (atributos y métodos) de otra clase.
Crear una super clase ´Datos´ con funcionamiento de almacenar datos personales de una persona cualquiera. Eesta será nuestra clase padre, la cual heredará después sus atributos y métodos a la clase hija.
public class Datos {
}
Declarar los atributos que tendrá nuestra clase ´Datos´ Los datos de una persona cualquiera son: nombre, apellido y edad.
public class Datos {
// Atributos
private String nombre;
private String apellidos;
private int edad;
Crear nuestro constructor para inicializar el objeto y establecer sus propiedades y valores predeterminados. Tiene el mismo nombre que la clase y no cuenta con ningún valor de retorno, ya que su función principal es inicializar el objeto y no devolver ningún valor.
//Constructor
public Datos (String nombre, String apellidos, int edad) {
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
Crear los métodos que retornarán los atributos (datos de la persona)
//Métodos
public String getNombre () { return nombre; }
public String getApellidos () { return apellidos; }
public int getEdad () { return edad; }
} //Cierre de la clase Alumno
Crear una clase hija llamada ´Profesor´ la cual extienda (extends) de la clase padre ´Datos´ para así poder heredar y hacer uso de los atributos y métodos antes creados en la clase padre.
public class Profesor extends Datos{
}
Declararemos un atributo exclusivo de la subclase o clase hija, solo esta le pertenece a si misma. La cual será el ID o matrícula de un profesor.
//Atributos específicos de la subclase.
private String IdProfesor;
Crear nuestro constructor para inicializar el objeto y establecer sus propiedades y valores predeterminados. Tiene el mismo nombre que la clase y no cuenta con ningún valor de retorno, ya que su función principal es inicializar el objeto y no devolver ningún valor.
Aquí se incluirán los atributos de la clase padre como parámetro del constructor de la clase hija.
//Constructor de la subclase: incluimos como parámetros los del constructor de la superclase (Datos)
public Profesor (String nombre, String apellidos, int edad) {
super(nombre, apellidos, edad);
IdProfesor = "Desconocido"; } //Cierre del constructor
Crear los métodos que retornarán los atributos (datos del profesor)
//Métodos específicos de la subclase
public void setIdProfesor (String IdProfesor) { this.IdProfesor = IdProfesor; }
public String getIdProfesor () { return IdProfesor; }
public void mostrarNombreApellidosID() {
System.out.println ("Nombre del profesor: " + getNombre() + " " + getApellidos() +
"\n con Id de profesor: " + getIdProfesor() ); }
} //Cierre de la clase
Para probar nuestro código creamos una clase donde lo ejecutaremos HerenciaTest.
public class HerenciaTest {
public static void main (String[] Args) {
// INSTANCIA
Profesor profesor1 = new Profesor ("Refugio", "Hernández García", 48);
Se hace una instancia de la clase Profesor y se declaran los valores que tendrán los atributos(nombre, apellido y edad) entre paréntesis.
Las instancias son la materialización de una clase, es decir, son objetos concretos que tienen su propio estado (los valores de sus atributos) y su propio comportamiento (los métodos que pueden ejecutar).
Determinamos el valor que le daremos al ID del profesor, con la instancia ya realizada anteriormente y el método SetIdProfesor.
profesor1.setIdProfesor("2130056");
Ejecutamos la instancia a través del método mostrarNombreApellidosID()
profesor1.mostrarNombreApellidosID();}
} //Cierre de la clase HerenciaTest
Probar el código desde HerenciaTest.
En la terminal nos saldrán los datos que habíamos establecido desde la clase hija, usando los parámetros de la clase padre.