Un problema típico en la programación de OO es el problema de los diamantes. Tengo una clase padre A con dos subclases B y C. A tiene un método abstracto, B y C lo implementan. Ahora tengo una subclase D, que hereda de B y C. El problema del diamante es ahora, ¿qué implementación usará D, la de B o la de C?¿Se puede resolver realmente el problema del diamante?
Las personas afirman que Java no conoce ningún problema con los diamantes. Solo puedo tener herencia múltiple con interfaces y dado que no tienen implementación, no tengo ningún problema con los diamantes. ¿Es esto realmente cierto? No lo creo. ver más abajo:
[ejemplo de vehículo eliminado]
es un problema de diamantes siempre la causa del mal diseño de la clase y algo que ni programador ni compilador necesita para resolver, ya que no debe existir en primer lugar?
Actualización: Tal vez mi ejemplo fue mal elegido.
Ver esta imagen
Por supuesto, puede hacer que la persona virtual en C++ y, por tanto, sólo tendrá una instancia de la persona en la memoria, pero el verdadero problema persiste en mi humilde opinión. ¿Cómo implementaría getDepartment() para GradTeachingFellow? Considere, él podría ser estudiante en un departamento y enseñar en otro. Entonces puede devolver un departamento u otro; no hay una solución perfecta para el problema y el hecho de que ninguna implementación pueda ser heredada (por ejemplo, Student y Teacher podrían ser ambas interfaces) no parece resolver el problema para mí.
Eso es más una publicación de blog que una pregunta. Tristemente, parece que la mayoría de las "respuestas" aquí hasta ahora no han leído todo. Pero es una perspectiva interesante que presentas. – Ken