La programación orientada a objetos (POO) es un paradigma que modela los programas de computadora como una colección de objetos que interactúan entre sí. OOP se diferencia de otros enfoques de programación al implementar código reutilizable en forma de clases.

Para permitir la reutilización, los programas de estilo OOP utilizan un mecanismo llamado herencia. La idea principal detrás de la herencia es crear nuevas clases (conocidas como «clases secundarias» o «secundarias») que heredan los atributos y métodos de clases preexistentes (conocidas como «clases principales») sin reescribir el código.
La herencia es una herramienta de modelado del mundo real intuitiva y útil. Considere, por ejemplo, el concepto de niños que heredan ciertas características físicas y comportamiento de sus padres. La herencia es particularmente adecuada para modelar muchos de estos fenómenos del mundo real.
Por ejemplo, imagina que quieres hacer un juego sobre pingüinos. Para esto necesitas una clase para padres – pingüino – que especifica los atributos y métodos de todas las clases secundarias pingüino tendrá. A continuación, puede crear estas clases secundarias con atributos y métodos más exclusivos, además de los ya adquiridos de la clase principal más general. Esto elimina la necesidad de copiar y pegar código de la clase principal a cada clase secundaria.
Por esta razón, muchos lenguajes de programación implementan OOP, incluido Java, en el que se centra este artículo. Java popularizó el uso de OOP en la década de 1980, facilitando la implementación de los cuatro principios básicos de OOP: herencia, encapsulación, abstracción y polimorfismo.
En este artículo, aprenderá cómo funciona la herencia de Java, conocerá los cinco tipos de herencia de Java y comprenderá mejor cómo funciona cuando se trata de representar las cosas reales en el código.
¿Qué es la herencia en java?
Generalmente, la herencia ocurre cuando uno o más descendientes, o subclases, amplían los atributos y funciones de uno o más padres o superclases. Hay cinco tipos de herencia en Java: única, multinivel, jerárquica, múltiple e híbrida.
Tipos de herencia en Java
Ahora veamos las diferentes formas de herencia y cómo se ven en los programas Java.
herencia única
Java usa la palabra clave se estira para indicar que una clase Java hereda atributos de otra clase. La herencia significa que Pingüino la clase contendrá abueloPrincipal método Animal clase sin reescribirla dentro Pingüino clase.
Para comprender la herencia única donde una clase secundaria hereda de una única clase base, considere el siguiente ejemplo general:
Puede probar fácilmente esta idea creando un programa simple que instancia una subclase y llama a ambos métodos (haga clic en la pestaña «salida» para ver la salida del código).
Usando el código anterior, puede confirmar la capacidad de una clase secundaria para usar los métodos de sus padres.
Herencia multinivel
La herencia multinivel ocurre cuando una clase hereda de otra clase que ya hereda de una tercera clase.
Para ilustrar este concepto, considere las dos clases presentadas en la sección anterior. Ahora agregará una tercera clase para describir las especies dentro Pingüino clase. Esta clase se llamará emperador para representar al pingüino emperador. Ya que hereda de Pingüino, emperador la clase tiene acceso a todos los atributos y métodos de ambos Pingüino clase de niños y Animal clase primaria.
Agregar esta especificidad requiere agregar nuevos niveles al «árbol de objetos». Como sugiere el nombre, se trata de una herencia multinivel.
El siguiente ejemplo de código prueba este concepto instanciando un an emperador el objeto y demostrando que puede acceder a los tres métodos:
herencia jerárquica
Suponga que desea agregar más especies de pingüinos al juego ahora para acompañar a los pingüinos emperador. Crearás una nueva clase para los pingüinos Gentoo, que destacan sobre todo por sus picos anaranjados:
Como puedes ver, Gentoo La clase hereda los mismos métodos que emperador sí, pero agrega algunos atributos personalizables que caracterizan a los pingüinos Gentoo. Además, como no hereda de emperador clase a la que estoy tratando de acceder niñoprincipal método emperador la clase informará un error. Esto se llama herencia jerárquica de la arquitectura.
Herencia múltiple
La herencia múltiple ocurre cuando una clase secundaria hereda de dos clases principales. Este estilo de herencia suele ser muy engorroso y crea problemas complejos. Por ejemplo, el compilador no puede distinguir ni priorizar entre dos métodos que tienen la misma firma de identificador. Por esta razón, Java no admite este tipo de herencia múltiple.
Sin embargo, Java 8 presentó una alternativa: implementar la herencia múltiple a través de las interfaces de Java y los métodos predeterminados. Las interfaces son clases abstractas que a menudo se usan para agrupar métodos relacionados. Este enfoque permite que la clase de implementación determine qué método usar con una palabra clave especial.
Además, el uso de métodos predeterminados en las interfaces ayuda a mitigar un desafío común con la herencia múltiple: la confusión del compilador. Si dos padres tienen un método con la misma firma de ID (es decir, un nombre de función), el compilador no puede determinar qué método padre usar. Palabra clave de Java Frío permite que la clase secundaria acceda a los métodos de la clase principal especificada, lo que ayuda a eliminar la ambigüedad del compilador.
El ejemplo anterior usa una interfaz (en lugar de una clase) para representar a cada padre. Ambos padres tienen un método con la misma ID: mostrar. los clase de prueba la clase hereda de ambos padres.
Para lograr la herencia múltiple, implementa una tercera mostrar métodos en la clase secundaria para anular ambos métodos. Luego, usando la palabra clave Frío, especifica el método principal al que desea llamar. Entonces llama primero mostrar Con pinguino1 y luego de pinguino2.
herencia híbrida
Para mayor flexibilidad, los desarrolladores a menudo combinan dos métodos de herencia. Esta práctica se llama herencia híbrida. El objetivo de usar la herencia híbrida es modularizar su base de código y crear clases bien definidas.
Supongamos que introduce una nueva clase:
Luego cambiará los nombres de los métodos mostrados en las clases anteriores. Ahora tiene herencia jerárquica porque ambos Pingüino y pájaro gato heredar de Animal. También tiene herencia multinivel porque Gentoo hereda de Pingüino.
Este ejemplo también muestra el uso de miembros protegidos. Mirando hacia atrás en la clase Animal, has usado la palabra clave proteger limitar la disponibilidad color de las plumas atributo. Esta palabra clave solo la pone a disposición de los métodos dentro de la clase o de aquellos que heredan de ella.
Polimorfismo y herencia
La herencia simplifica la reutilización del código, lo que le permite crear diferentes instancias de la clase principal sin volver a escribir el código. La herencia es un concepto similar al polimorfismo, por lo que es fácil confundirse. Sin embargo, no son lo mismo.
La diferencia es que el polimorfismo permite la personalización. Gracias al polimorfismo, las clases secundarias pueden realizar pequeños cambios en los métodos heredados y luego identificar cuáles compilar en función de los parámetros de entrada. Consulte nuestro artículo sobre polimorfismo en Java para obtener más información.
Usando la herencia de Java en el código
La herencia es una gran herramienta para mejorar la reutilización de código y el modelado del mundo real, y Java proporciona las herramientas adecuadas para incorporar la herencia sin problemas en su conjunto de herramientas. La flexibilidad que brindan los cinco tipos lo hace extremadamente útil para representar rasgos del mundo real.
Además, puedes usar Frío palabras clave e interfaces para implementar técnicas de herencia múltiple. Esto aumenta la capacidad de la herencia para modelar fenómenos del mundo real, lo que la hace muy útil para crear videojuegos y programas de realidad virtual.









