El concepto de herencia múltiple (donde una clase hereda de dos o más superclases) es a veces difícil de entender. Os dejo un par de imágenes que ilustran muy claramente ejemplos de herencia múltiple.
y este segundo que ilustra el post y que aparte de ser más real, es hasta un ejemplo útil de herencia múltiple
Sinceramente yo no soy muy fan del concepto de herencia múltiple. Es una herramienta muy potente pero donde es muy fácil acabar complicándose la vida, por ejemplo, con la temida estructura en diamante:
En esta estructura, la clase Class4
heredará dos veces los atributos y métodos de la clase Class1
, uno por cada camino de especialización. Esto ya de por sí nos será raramente útil (la mayoría de veces querríamos sólo uno, no tenemos uso para dos diferentes) y aparte nos obliga cada vez a cualificar esos atributos, diciendo si estamos accediendo a la copia que nos viene por un lado o por el otro o definir un tipo de orden entre ellos.
Es pot ello que muchos lenguajes de programación directamente no la soportan. El ejemplo clásico es Java que lo simula mediante interfaces. Una herencia múltiple en tu diseño tendrá que transformarse en una herencia simple más una interfaz adicional que tendrá que implementar la clase hija. Razón de más para ignorar herencias múltiples en vuestros diseños software: serán un dolor de cabeza a la hora de implementar ese diseño que tan bonito os ha quedado. O como mínimo pensarlo dos veces. Por esto mismo, la mayoría (¿todas?) las plataformas low-code la evitan, ya que limitaría sus opciones a la hora de generar código automáticamente.
Ciertamente, tampoco es culpa de la pobre herencia múltiple que esté tan mal soportada en los lenguajes de programación pero a no ser que tengáis ganas de arreglar el mundo, mejor ir con cuidado. Leed también los comentarios de este post con más pros y contras de la herencia múltiple.
Usando metalenguajes como el XML podemos implementar la herencia múltiple a la hora de diseñar esquemas XML, después generamos las clases via BIND como JAXB.