Herencia múltiple en java

Java no permite la herencia de múltiples clases (aún permite la herencia de múltiples interfaces). Sé que está en línea con el problema clásico de los diamantes. Pero mis preguntas son: ¿por qué Java no permite herencia múltiple como C ++ cuando no hay ambigüedad (y por lo tanto no hay posibilidades de que surja un problema con el diamante) mientras se hereda de una clase base múltiple?

Fue una decisión de diseño de Java. Nunca lo conseguirás, así que no te preocupes demasiado por eso. Aunque MI puede ayudarte a crear Mixins, ese es el único bien que MI te hará alguna vez.

He leído que la mayoría de los progtwigdores no usan herencia múltiple de manera adecuada. “Seguir adelante y heredar de una clase solo para reutilizar el código” no es la mejor práctica en caso de herencia múltiple.

Muchos progtwigdores no saben cuándo usar herencia simple en la mayoría de los casos. La herencia múltiple debe usarse con precaución y solo si usted sabe lo que está haciendo si quiere tener un buen diseño.

No creo que la falta de herencia múltiple en java (como en c ++) imponga restricciones en el diseño del código / aplicación / mapeo del dominio del problema en las clases.

Sencillez. Para citar a Tom Sintes ,

El equipo de diseño de Java se esforzó por hacer Java:

  • Simple, orientado a objetos y familiar
  • Robusto y seguro
  • Arquitectura neutral y portátil
  • Alto rendimiento
  • Interpretado, enhebrado y dynamic

Las razones para omitir la herencia múltiple del lenguaje Java provienen principalmente del objective “simple, orientado a objetos y familiar”. Como un lenguaje simple, los creadores de Java querían un lenguaje que la mayoría de los desarrolladores pudieran comprender sin una capacitación extensa. Para ello, trabajaron para que el lenguaje fuera lo más similar posible a C ++ (familiar) sin sobrecargar la complejidad innecesaria de C ++ (simple).

En opinión de los diseñadores, la herencia múltiple causa más problemas y confusiones de las que resuelve. Entonces cortaron herencia múltiple del lenguaje (del mismo modo que redujeron la sobrecarga del operador). La amplia experiencia de los diseñadores en C ++ les enseñó que la herencia múltiple no valía la pena.

si Java admite herencia múltiple, entonces puede afectar otras características de Java
Considere el método super () que se usa para llamar al constructor de superclase. Si el progtwig tiene múltiples superclases (debido a herencia múltiple), el comstackdor se confundirá sobre qué constructor de superclase se debe invocar y arrojará un error.

Los diseñadores de Java decidieron eso. La herencia múltiple se puede simular mediante el uso de interfaces.

Una respuesta simple es que todas las clases en Java derivan de java.lang.Object IIRC. Entonces, siempre tendrías un problema con los diamantes … 😀

Es cierto que Java no usó para admitir herencia múltiple de implementación (solo de tipo ie interfaz). Esa fue una decisión de diseño.

Sin embargo, desde Java 8, admite herencia múltiple utilizando métodos predeterminados. Ver http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html :

La herencia múltiple de la implementación es la capacidad de heredar definiciones de métodos de múltiples clases. Surgen problemas con este tipo de herencia múltiple, como conflictos de nombres y ambigüedad. … Los métodos predeterminados introducen una forma de herencia múltiple de implementación.

El problema del diamante surge cuando las clases principales múltiples definen sus propias implementaciones de algo y la clase hija de estos dos tiene que lidiar con la ambigüedad de qué implementación usar. Entonces, ¿qué pasa si todas las clases en Java derivan de Object, esa es una clase para padres solteros. “Padre soltero, múltiples clases derivadas” no es lo mismo que “Padres múltiples, clase derivada simple”