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.
¿Qué es la herencia en Java?
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.
4 tipos de herencia en Java
En Java podemos utilizar al menos los siguientes cuatro tipos de herencia. Cabe destacar que algunos tipos de herencia en Java se simulan utilizando interfaces y no precisamente clases como tal. Si intentamos hacerlo con clases el compilador de Java nos arrojará diversas advertencias y errores.
Herencia simple o única
Una clase hija hereda de una clase padre.
Herencia múltiple
Una clase hija hereda de dos o más clases padre.
Herencia multinivel
Una clase hija hereda de una clase padre, que a su vez es clase hija de otra clase padre.
Herencia jerárquica
Una clase padre hereda a dos o más clases hijas.
Ejemplos de herencia en Java
A continuación, verás un ejemplo de herencias en Java. Te mostraremos tres tipos de herencia:
- Simple: la herencia de la clase Persona a Profesor
- Multinivel: la herencia de Persona a Alumno y de Alumno a Practicante
- Jerárquica: la herencia de Persona a Alumno y a Profesor al mismo tiempo
Veámoslo todo con más detalle:
1. Herencia simple
//Main.java public class Main { public static void main (String [ ] Args) { Profesor profesor1 = new Profesor ("Profesor", "Mendoza Cuba", 33); //profesor1.setIdProfesor("PROFESOR123456789"); System.out.println(profesor1.toString());
Alumno alumno1 = new Alumno ("Alumno", "Pardo Manila", 15); alumno1.setIdAlumno("ALUMNO123456789"); System.out.println(alumno1.toString());
Practicante practicante1 = new Practicante ("Practicante", "Torres Nilo", 19); practicante1.setIdPracticante("PRACTICANTE123456789"); System.out.println(practicante1.toString()); } } |
2. Herencia multinivel
//Persona.java public class Persona { //Atributos private String nombre; private String apellidos; private int edad;
//Constructor public Persona (String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; }
//Funciones public String getNombre() { return nombre; } public String getApellidos() { return apellidos; } public int getEdad() { return edad; } } |
3. Herencia jerárquica
//Profesor.java public class Profesor extends Persona { //Atributos propios de la subclase private String IdProfesor;
//Constructor public Profesor (String nombre, String apellidos, int edad) { super(nombre, apellidos, edad); IdProfesor = "Unknown"; }
//Métodos propios de la subclase public void setIdProfesor (String IdProfesor) { this.IdProfesor = IdProfesor; }
public String getIdProfesor () { return IdProfesor; }
public String toString() { return "" + getNombre() + " " + getApellidos() + " - " + getEdad() + " - " + getIdProfesor(); } } |
//Alumno.java public class Alumno extends Persona { //Atributos propios de la subclase. private String IdAlumno;
//Constructor public Alumno (String nombre, String apellidos, int edad) { super(nombre, apellidos, edad); IdAlumno = "Unknown"; }
//Métodos propios de la subclase public void setIdAlumno (String IdAlumno) { this.IdAlumno = IdAlumno; }
public String getIdAlumno () { return IdAlumno; }
public String toString() { return "" + getNombre() + " " + getApellidos() + " - " + getEdad() + " - " + getIdAlumno(); } } |
//Practicante.java public class Practicante extends Alumno { //Atributos propios de la subclase. private String IdPracticante;
//Constructor public Practicante (String nombre, String apellidos, int edad) { super(nombre, apellidos, edad); IdPracticante = "Unknown"; }
//Métodos propios de la subclase public void setIdPracticante (String IdPracticante) { this.IdPracticante = IdPracticante; }
public String getIdPracticante () { return IdPracticante; }
public String toString() { return "" + getNombre() + " " + getApellidos() + " - " + getEdad() + " - " + getIdPracticante(); } } |
Ahora que conoces los tipos de herencia en Java y cómo es su aplicación, es tiempo de que comiences a experimentar por tu cuenta en tus proyectos.