Dentro del ámbito del desarrollo de software hay muchos lenguajes disponibles para programar, muchos tienen usos determinados, como por ejemplo Java, que es un lenguaje de programación orientado a objetos.
En los lenguajes para POO, se utilizan conceptos específicos para su objetivo.
Entre ellos se encuentra el concepto de herencia.
La herencia es uno de los conceptos más importantes de la programación orientada a objetos, y su principal ventaja es la capacidad de utilizar el mismo código que hemos programado en una clase, en otras clases que heredan de ella sus métodos (funciones) y sus atributos (variables).
Cuando una clase hereda de otra, se le llama subclase, clase hija o clase derivada.
Y la clase que es heredada, se llama clase base, padre o superclase.
Las clases hijas reciben las funciones de su clase padre y además implementan sus propias funciones o métodos.Si no fuera así no tendría sentido crear clases hijas.
A su vez la clase hija puede ser heredada por otras clases hijas.
Con la palabra reservada extends le decimos a la clase hija de qué clase padre hereda sus propiedades.
Los tipos de herencia son las relaciones que implementamos entre las clases.
Híbrida combina modelos de herencia, por ejemplo herencia simple y herencia múltiple
Las funciones de la clase padre deben estar definidas como public para que puedan ser utilizadas desde cualquier otra clase. Si no están definidas como públicas, solo se podrán usar dentro de la clase que las declara.
Los métodos que pertenezcan a la clase hija o derivada, no podrán ser utilizados por la clase padre o superclase, aunque sí podrán ser usados por las clases derivadas de la clase hija.
Por herencia automáticamente todas las clases hijas pueden utilizar los métodos implementados en la clase padre (también llamada superclase).
La herencia hasta un tercer nivel es manejable, más de eso se vuelve complejo.
Ejemplo:
//clase padre, base o superclase
class Persona {
// atributos de la clase padre
String nombre;
int edad;
int telefono;
}
// clase hija, subclase o clase derivada
class Cliente extends Persona{
//atributo de la clase hija
int credito;
}
// otra clase hija
class Trabajador extends Persona{
//atributo propio de la clase hija
int salario;
}
Donde Cliente y Trabajador son clases derivadas (hijas) de la clase Persona que es la clase padre, de la cual heredan métodos y atributos.
Dentro de las herencias se encuentran las clases abstractas, que heredan a sus clases hijas la indicación de la obligatoriedad de implementar métodos que han sido definidos en la clase padre, pero no han sido implementados, están vacíos.