Tra le non poche motivazioni e spiegazioni della mancanza di ereditarietà multipla in Java c'è anche un vecchio
white paper di
James Gosling, recentemente testimone del disastro aereo di
Reno; nel documento si sottolinea che la finalità specifica di questa scelta risulta essere la
semplicità rispetto al più
bolso C++, linguaggio che rimane comunque punto di riferimento fondamentale per il nuovo e giovane (allora) concorrente.
In sostanza, si ritiene che l'ereditrietà multipla sia di un meccanismo troppo complesso, il cui utilizzo finisce per dare più
grattacapi che vantaggi. Sull'argomento però non c'è unanimità, come emerge ad esempio dalle
soluzioni adottate dai progettisti di
Scala, linguaggio che a sua volta deriva da Java e vuole rendere più produttivi i programmatori, appunto per surrogare questa mancanza.
Ultimamente, qualcuno dalle parti di
Insightful Logic ha voluto provare il brivido della trasgressione proprio su questo terreno accidentato, predisponendo una semplice implementazione Java dell'ereditarietà multipla. Si tratta ovviamente di un
progetto sperimentale, per il quale appare dunque quasi superflua l'avvertenza che segue immediatamente il titolo del
post: "DO NOT use this in production code yet, its far too immature.
Anche se il meccanismo di ereditarietà multipla in Java è limitato alle interfacce, si può realizzare l'implementazione di queste ultime attraverso la cosiddetta
Dependency Injection, utilizzando strumenti come
Guice o
Spring come punto di partenza.
Per quanto possa sembrare inopportuno e perfino masochistico andare a recuperare con trucchi vari un meccanismo esplicitamente respinto dai progettisti del linguaggio, le variazioni su tema a volte portano idee nuove e magari qualche beneficio pratico, per cui eventuali volenterosi potranno cimentarsi con questo Java (diciamo così) esteso prelevando il relativo codice da
GitHub.