types inheritance java single vs multiple inheritance
Aprenda todo sobre los distintos tipos de herencia en Java con la ayuda de ejemplos sencillos. Descubra si Java admite herencia múltiple:
En nuestro último tutorial presentamos la herencia en Java junto con los diversos conceptos básicos relacionados con la herencia.
En este tutorial, exploraremos más en el tema de la herencia y aprenderemos más sobre los tipos de herencia.
=> Consulte TODOS los tutoriales de Java aquí.
cuanto cuesta el punto de venta quickbooks
Lo que vas a aprender:
Tipos de herencia en Java
Dependiendo de la forma en que se hereden las clases y de cuántas clases se hereden, tenemos los siguientes tipos de herencia como se muestra en la siguiente figura.
Como se muestra en la figura anterior, hay cinco tipos de herencias en la programación orientada a objetos como se describe a continuación:
# 1) Herencia única: Cuando una clase o subclase derivada hereda de una sola base o superclase, se trata de una herencia única.
# 2) Herencia multinivel: En Herencia multinivel, tenemos más de un nivel en el que una clase hereda de una clase base y la clase derivada a su vez es heredada por otra clase.
# 3) Herencia jerárquica: Se forma una jerarquía de herencia en este tipo de herencia cuando una superclase es heredada por más de una clase.
# 4) Herencia múltiple: La herencia múltiple es aquella en la que una clase puede heredar propiedades y comportamiento de más de un padre.
# 5) Herencia híbrida: Cuando se combinan uno o más tipos de herencia, se convierte en una herencia híbrida.
Tenga en cuenta que Java solo admite el tipo de herencia jerárquica, multinivel y único mediante clases. Java no admite herencia múltiple e híbrida con clases.
Ahora discutiremos cada tipo de herencia en detalle con ejemplos de programación.
Herencia única en Java
Una sola herencia se representa como se muestra a continuación:
Aquí una subclase hereda de una sola superclase. Esta es una herencia única. Cualquier animal como Perro hereda de la especie Animal. Ésta es la forma más simple de herencia.
A continuación se muestra un programa Java que explica la herencia única.
|_+_|Producción:
Aquí, tenemos un método eat (Action_eat) en la clase base Animal que es común a las especies animales. Tenemos una clase derivada Perro que deriva de la clase Animal. En la clase Perro, tenemos un método específico para las especies de perros, ladrido (Action_bark).
Luego creamos un objeto Dog en el método principal y como la clase Dog ha heredado la clase Animal, este objeto puede llamar tanto al método eat como al método bark.
Herencia multinivel en Java
En la herencia de varios niveles, tenemos una cadena de herencia. Esto significa que tenemos una clase padre que es heredada por una clase derivada. La clase derivada, a su vez, actúa como padre de otra clase y así sucesivamente.
La herencia de varios niveles se puede representar de la siguiente manera:
Como se ve en la figura anterior, hay una clase padre A. La clase B hereda de la Clase A. Luego hay otra clase C que a su vez hereda de la Clase B. Por lo tanto, podemos ver que forma una cadena de herencia. Aquí la clase B se convierte en una clase intermedia que conecta las clases A y C.
Continuando con nuestro ejemplo de clase Animal a continuación, podemos tener una clase Perro derivada de la clase Animal. Entonces podemos tener otra clase Puppy que es un perrito derivado de la clase Dog. De esta forma, podemos tener la herencia multinivel.
A continuación se muestra un programa de ejemplo de herencia multinivel.
|_+_|Producción:
Hemos programado la cadena exacta que se muestra arriba. Luego, en el método principal, creamos un objeto de la clase C. El objeto de la clase C puede acceder a los métodos de su padre B y del abuelo A.
Herencia jerárquica en Java
Una clase puede tener más de una clase derivada de ella. Entonces tenemos una base o superclase y más de una subclases. Este tipo de herencia se denomina 'herencia jerárquica'.
La herencia jerárquica se representa esquemáticamente a continuación:
Como ejemplo de herencia jerárquica, podemos representar la clase Animal como una superclase y luego tener más de un animal como gato, perro, vaca, etc. derivado de ella.
El siguiente programa Java demuestra la herencia jerárquica en Java.
|_+_|Producción:
Como vemos en el programa, tenemos una clase padre y tres clases hijo derivadas de este padre. En el método principal, creamos un objeto de cada una de las clases secundarias y llamamos a sus respectivos métodos miembros.
Para llamar a los métodos de la clase principal, tenga en cuenta que podemos usar cualquiera de los objetos de la clase secundaria ya que todos tienen acceso a la clase principal.
Herencia múltiple en Java
La herencia múltiple es una situación en la que una clase puede heredar de más de una clase, es decir, una clase puede tener más de un padre. Al hacer esto, la clase puede tener más de una superclase y así adquirir las propiedades y el comportamiento de todas sus superclases.
La representación esquemática de herencia múltiple se muestra a continuación:
Como se muestra arriba, podemos derivar una clase de más de una clase simultáneamente. De esta forma, la clase derivada adquirirá las características de todas sus clases padre. Esto puede dar lugar a serias ambigüedades, especialmente cuando las características heredadas son las mismas.
Nota:Java no admite la herencia múltiple mediante clases. Pero admite herencia múltiple usando interfaces que discutiremos en nuestro próximo tutorial sobre herencia.
Dado que Java no admite la herencia múltiple con clases, no entraremos en detalles. Sin embargo, más adelante en el tutorial, intentaremos comprender las razones por las que Java no admite la herencia múltiple.
Herencia híbrida en Java
La herencia híbrida es una combinación de uno o más tipos de herencias que hemos discutido anteriormente. Sin embargo, cualquier combinación da como resultado un tipo de herencia múltiple que no es compatible con Java.
Una herencia híbrida se puede representar esquemáticamente como se muestra a continuación.
Por lo tanto, Java no admite la herencia híbrida con las clases. Pero al igual que la herencia múltiple, podemos implementar la herencia híbrida en Java usando interfaces. Discutiremos esto en detalle en nuestro próximo tutorial.
¿Por qué Java no admite la herencia múltiple?
Java apunta a la simplicidad en los programas. Esto se aplica incluso a las funciones de programación orientada a objetos. Por tanto, cuando se trata de herencia múltiple, pueden surgir situaciones ambiguas cuando derivamos una clase de más de una clase.
Ahora entendamos los problemas que pueden surgir cuando tenemos herencia múltiple en nuestro programa.
Considere los siguientes sistemas de herencia múltiple.
Si vemos el sistema anterior, se explica por sí mismo. Aquí la clase A y la clase B son clases de dos padres heredadas por la clase C. Ahora hemos demostrado que tanto las clases A como B tienen un método con el mismo nombre, es decir, print (). Entonces, cuando la clase C hereda A y B, obtendrá ambas versiones del método print ().
En este caso, la clase C no sabrá qué método debe heredar. Esta es la situación ambigua que mencionamos anteriormente que surge en el caso de herencia múltiple.
Por lo tanto, Java emite un error de compilación cuando la clase hereda de más de una clase.
El siguiente programa Java lo demostrará.
|_+_|Producción:
Como se ve en la salida, el compilador de Java emite un error cuando encuentra que la clase extiende dos clases.
Aunque Java no permite heredar dos clases simultáneamente, nos ofrece una forma de evitar esta limitación. Podemos simular herencia múltiple usando interfaces en lugar de clases. Discutiremos esto en nuestros tutoriales posteriores.
Problema del diamante
La herencia múltiple da como resultado una situación denominada 'problema del diamante'.
Considere que tenemos el siguiente sistema de herencia.
|_+_|Podemos representar este sistema en forma de diagrama como se muestra a continuación:
la mejor descarga de música mp3 para android
Como podemos ver en el diagrama anterior, todo el sistema de herencia aparece en forma de diamante. Debido a esta estructura de diamante, la ambigüedad se denomina 'Problema del diamante'.
Como se explicó anteriormente para la herencia múltiple, la ambigüedad aquí es el número múltiple de copias del método show () que la clase Sample obtiene como resultado de la herencia. Como hay múltiples rutas, logra el método show () y existe una ambigüedad con respecto a qué copia heredar.
Al igual que con la herencia múltiple, el problema del diamante también se puede resolver mediante interfaces.
Reglas de herencia en Java
Hasta ahora hemos visto los conceptos básicos de la herencia, así como los tipos de herencia en Java, enumeremos algunas reglas que debemos seguir al desarrollar aplicaciones con herencia.
Regla n. ° 1: Java no admite herencia múltiple
Como ya hemos visto, Java no admite herencia múltiple de ninguna forma. Cuando se intenta la herencia múltiple en un programa, el compilador de Java emite un error de compilación.
Regla n. ° 2: Java no permite la herencia cíclica
Una clase que se hereda a sí misma para formar un ciclo se llama Herencia cíclica.
Considere las siguientes clases, class1 y class2.
class class1 extiende la clase 2 {}
class class2 extiende la clase 1 {}
La situación anterior forma un bucle. Esto no está permitido en Java.
Regla n. ° 3: no podemos heredar miembros de datos privados
Ya hemos aprendido en el tema 'Modificadores de acceso' que los miembros con acceso privado no se pueden heredar.
Regla n. ° 4: los constructores no se heredan
Dado que los constructores se utilizan para crear objetos de clase, no se heredan de una clase a otra.
Regla n. ° 5: podemos usar la referencia principal para acceder a los objetos secundarios
Ya hemos visto varios ejemplos de herencia. Podemos crear una referencia de tipo parent class y luego asignarle un objeto de clase derivada creado usando la nueva palabra clave.
Si super es una superclase y sub es una clase derivada de super como se muestra a continuación.
|_+_|Regla n. ° 6: los constructores principales se ejecutan debido a super () en los constructores derivados
Una de las reglas establece que los constructores no se pueden heredar. Pero el constructor de la superclase se puede ejecutar dentro del constructor de la clase derivada usando la llamada super ().
Preguntas frecuentes
P # 1) ¿Qué tipo de herencia no es compatible con Java?
Responder: Java no admite la herencia múltiple, ya que puede dar lugar a problemas en aplicaciones como el problema del diamante. Java tampoco admite la herencia híbrida, ya que es una combinación de uno o más tipos de herencia y, en última instancia, puede convertirse en herencia múltiple.
P # 2) ¿Cuál de los miembros de la clase se puede heredar?
Responder: Una clase puede heredar miembros públicos y protegidos de su clase base, pero no puede acceder a los miembros privados de la clase base.
P # 3) ¿Por qué no se permite la herencia múltiple?
Responder: La herencia múltiple genera ambigüedad cuando las clases de dos padres tienen métodos con el mismo prototipo. En este caso, la clase derivada enfrenta una ambigüedad con respecto a qué clase base debería heredar el método.
La herencia múltiple también puede resultar en un problema de diamante en Java. Por lo tanto, Java no admite la herencia múltiple.
P # 4) ¿Por qué necesita la herencia múltiple?
Responder: Los lenguajes como Java y C # imponen la herencia múltiple utilizando múltiples interfaces. Entonces, cuando necesitamos heredar características de más de una interfaz, necesitamos herencia múltiple.
P # 5) ¿Cuál es el uso principal de la herencia multinivel?
Responder: Se dice que una clase derivada de otra clase que a su vez se deriva de una tercera clase exhibe herencia multinivel. Los niveles en este tipo de herencia se pueden extender a cualquier número siempre que se mantenga la claridad y simplicidad.
Podemos representar diferentes niveles de especies usando herencia multinivel. Desde el punto de vista de la programación, cuando queremos representar varios niveles de clases de aplicación, optamos por la herencia multinivel.
Conclusión
En este tutorial, hemos discutido los tipos de herencia en Java. Java solo admite los tipos de herencia Único, Multinivel y Jerárquico. Java no admite la herencia múltiple e híbrida. Hemos discutido la ambigüedad de la herencia múltiple y el problema del diamante en Java.
Luego discutimos las diversas reglas que debemos seguir al implementar la herencia en Java. Con esto, hemos completado nuestra discusión sobre la relación IS-A en Java.
=> Tenga cuidado con la serie de capacitación simple de Java aquí.
Lectura recomendada
- ¿Qué es la herencia en Java? Tutorial con ejemplos
- Herencia en C ++
- Tipos de herencia en C ++
- Conceptos básicos de Java: sintaxis de Java, clase de Java y conceptos básicos de Java
- Clase Java Integer y Java BigInteger con ejemplos
- Tipos de clases en Java: abstracto, concreto, final, estático
- Variables de Java y sus tipos con ejemplos
- Tutorial de clase de escáner de Java con ejemplos