La herencia múltiple en Java
-
12-09-2019 - |
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"