¿Qué es la Herencia?
La herencia es un concepto clave en la programación orientada a objetos (POO). Se trata de un mecanismo que permite crear nuevas clases a partir de otras ya existentes, propagando de esta forma ciertas características o comportamientos a las nuevas clases generadas. Esto ayuda a reducir la duplicidad de código y a crear relaciones lógicas entre diferentes clases.
Cuando una clase se hereda de otra, se dice que la nueva clase es una «subclase» o «clase hija«, y la clase de la que se hereda se denomina «superclase» o «clase padre«. La clase hija puede heredar atributos y métodos de la clase padre y también puede tener sus propios atributos y métodos únicos.
Ejemplos
Un buen ejemplo puede ser el de un sistema de gestión de personal para una empresa. Podríamos tener una clase padre llamada «Empleado» que contenga atributos y métodos comunes a todos los empleados, como nombre, número de identificación, salario, función para calcular la nómina, etc.
Luego, podríamos tener varias clases hijas que heredan de «Empleado», como «Gerente», «Ingeniero» o «Secretaria». Estas clases hijas tendrían todos los atributos y métodos de «Empleado», pero además podrían tener sus propios atributos y métodos únicos, como «departamento que gerencia» para Gerente, «campo de ingeniería» para Ingeniero, y «número de máquina de escribir» para Secretaria.
class Empleado:
def __init__(self, nombre, id, salario):
self.nombre = nombre
self.id = id
self.salario = salario
class Gerente(Empleado):
def __init__(self, nombre, id, salario, departamento):
super().__init__(nombre, id, salario)
self.departamento = departamento
Preguntas frecuentes
- Informarse sobre los tipos de herencias: Existen varios tipos de herencia como la herencia simple, la herencia múltiple, la herencia multnivel, entre otras. Cada uno con sus propios usos y reglas. Para más detalles puedes visitar este enlace.
- ¿La herencia puede ser utilizada en todos los lenguajes de programación? No todos los lenguajes de programación soportan la herencia. Por ejemplo, los lenguajes procedimentales como C no la soportan, mientras que los lenguajes orientados a objetos como Java, Python y C++ sí lo hacen.