Pregunta

Java no permite la herencia de varias clases (todavía se permite la herencia de múltiples interfaces.), Sé que es mucho en línea con el problema de diamante clásico. Pero mi pregunta es ¿por qué Java no permite la herencia múltiple como C ++, cuando no hay ambigüedad (y por lo tanto no hay posibilidades de que un problema de diamante), mientras que hereda de la clase base múltiple?

Otros consejos

He leído que la mayoría de los programadores no utilizan la herencia múltiple de una manera adecuada. "Sólo tienes que ir adelante y heredar de una clase sólo para reutilizar el código" no es la mejor práctica en caso de herencia múltiple.

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

No creo que la falta de herencia múltiple en Java (como en C ++) pondrá restricciones en el dominio de la cartografía de diseño / problema de código / aplicación en clases.

si el soporte java herencia múltiple, entonces puede efectuar otras funciones de Java
considerar método super () que se utiliza para llamar a super programa constructor.if clase tiene múltiples superclase (debido a la herencia múltiple), entonces compilador confundirse sobre qué constructor de superclase debe ser llamado y lanzar un error

La simplicidad. Para citar Tom Sintes ,

  

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

     
      
  • simple, orientado a objetos, y familiar
  •   
  • robusta y segura
  •   
  • arquitectura neutra y portátil
  •   
  • alto rendimiento
  •   
  • interpretado, roscado, y dinámica
  •   
     

Las razones de la omisión de la herencia múltiple del lenguaje Java   en su mayoría se derivan de la "simple, orientado a objetos, y familiar" meta. Como   un lenguaje sencillo, los creadores de Java quería un lenguaje que la mayoría   los desarrolladores pueden aprovechar sin una amplia formación. Para tal efecto,   trabajado para hacer de la lengua como similar a C ++ como sea posible (familiar)   sin llevar más de una complejidad innecesaria C ++ 's (simple).

     

En opinión de los diseñadores, la herencia múltiple provoca más problemas   y la confusión de los que resuelve. Así que cortan la herencia múltiple de   la lengua (al igual que cortan la sobrecarga de operadores). Los diseñadores   amplia experiencia en C ++ les enseñó que la herencia múltiple solo   no valía la pena el dolor de cabeza.

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

Una respuesta sencilla es que todas las clases de Java se derivan de java.lang.Object IIRC. Por lo tanto, lo haría siempre tiene un problema de diamantes ... :-D

Es cierto que Java no utilizó para apoyar la herencia múltiple de aplicación (justo es decir del tipo de interfaz). Esa fue una decisión de diseño.

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

  

La herencia múltiple de aplicación es la posibilidad de heredar   definiciones de métodos de varias clases. Los problemas surgen con este   tipo de herencia múltiple, tales como conflictos de nombre y la ambigüedad.   ... métodos predeterminados introducen una forma de herencia múltiple de   aplicación.

El problema surge cuando hay varios diamantes clases padre definir sus propias implementaciones de algo y la clase hija de estos dos tiene que lidiar con la ambigüedad de la aplicación que debe utilizar. ¿Y qué si todas las clases de Java se derivan del objeto, que es una sola clase padre. "Sólo padre, múltiples clases derivadas" no es lo mismo que "Múltiples padres, sola clase derivada"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top