Saltar al contenido

¿Qué es la HERENCIA en programación?

que es la herencia en programacion java

La herencia es utilizada en programación orientada a o objetos, y es uno de los conceptos principales que hay que saber para aprender a programar en cualquiera de los lenguajes utilizados en la actualidad.

Para hacer un resumen rápida, la herencia entre dos objetos es la posibilidad de heredar las características de un objeto al otro. Estas características son los atributos y los métodos.

Pero no solo permite heredar sus características, sino que podemos definir una jerarquía para poder reusar el código ya generado, además de crear nuevas características en nuevas clases (y a su vez que también puedan heredarse).

Esta herencia tiene una serie de propiedades que nos permiten hacer el código más versátil: podemos ocultar algunas propiedades para que, aunque se hereden, no puedan verse en el nuevo objeto, por poner un ejemplo.

Ejemplo de usar la herencia en Java

En Java hablamos de superclase, que es la clase que heredará sus atributos. La clase que hereda de una superclase se llama subclase.

En otros lenguajes de programación se puede decir clase padre y clase hijo, pero es lo mismo. Pongamos un ejemplo.

Imagina que tienes una clase Empleado, con sus principales atributos (o variables):

public class Empleado {
    public String nombre = "";
    public double sueldo;
    public Date fechaNacimiento;
}

Si no usamos herencia, si ahora creamos un empleado más especializado, como puede ser un Gerente. Su código de clase sería el siguiente:

public class Gerente {
    public String nombre = "";
    public double sueldo;
    public Date fechaNacimiento;
    public String centroTrabajo; 
} 

Con este ejemplo vemos que tenemos que duplicar datos entre las dos clases Empleado y Gerente.

Además, podemos tener métodos o funciones que también se repitan. Por lo tanto, necesitamos de alguna manera crear una nueva clase a partir de una que ya exista.

Esto se resuelve usando la herencia entre objetos.

En los lenguajes de programación orientados a objetos, tenemos estos mecanismos para poder definir una clase a partir de otra creada previamente.

Vamos a implementarlo en Java, pero en todos los lenguajes te permite heredar de una forma parecida.

Ahora la clase Gerente cambia su código, y sería de la siguiente manera:

public class Gerente extends Empleado {
    public String centroTrabajo:
}

Como vemos, Gerente solo tiene un atributo, pero hereda los atributos de la clase Empleado. De esta manera hemos simplificado el código de una manera muy sencilla.

Si ahora creamos una clase llamada Director, que heredase de Gerente, tendría todos los atributos de Empleado y Gerente, además de poder tener sus propios atributos.

De esta manera podríamos crear otras clases, como puede ser Secretaria o Ingeniero, y hacer que hereden de las clases que más nos convenga.

Qué es herencia simple y herencia multiple (en Java)

En Java solo podemos heredar de una clase solamente. Esta restricción se denomina herencia simple.

Existen otros lenguajes como C++ que nos permite heredar de más de una clase a la vez. Este tipo de herencia se llama herencia múltiple.

Se puede discutir sobre los beneficios entre la herencia simple y múltiple, así que en lenguajes de programación que solo permiten la herencia simple tienen las interfaces.

Las interfaces provee los beneficios de la herencia múltiple y no tiene ninguno de sus inconvenientes, por lo tanto es la solución que utilizan lenguajes como Java o C#.

Modificadores de acceso

Hemos dicho que podemos ocultar los atributos de una superclase a una subclase. Esto nos puede interesar si no queremos que cambie la lógica de programación o proteger el código que hemos hecho.

Para poder hacerlo, existen unas palabras reservadas que modifican el acceso a las propiedades de una clase. Los modificadores más habituales son:

  • private: no se puede acceder a atributos y métodos de una clase heredada, es decir, sólo se pueden modificar en la propia clase.
  • public: todos los atributos y métodos son visibles, por tanto, se verán cuando se hereden.
  • protected: este es un poco especial. Al estar protegido la clase que hereda puede acceder, pero serían privados para esa clase. Por tanto, si se vuelve a heredar no se verían en la nueva subclase.
  • sin declarar: en Java, si no está declarado, tiene acceso a todas las propiedades del mismo paquete.

Para hacerlo fácil, en la siguiente tabla tienes un resumen de como quedaría:

ClaseSubclasePaqueteTodos
public
privateNo No No
protected No
sin declarar No No No