Je suis d'accord avec la réponse de @Kilian mais je vais ajouter quelques éléments.
1- Exécution sur une machine virtuelle et non sur le système d'exploitation
Étant donné que Java et C # s'exécutent sur une machine virtuelle, il est logique que vous ne puissiez pas faire exactement ce que vous voulez quand vous êtes directement sur le système d'exploitation, car vous risqueriez de corrompre quelque chose sur la machine virtuelle. De plus, Java étant orienté comme une plate-forme agnostique, c'est encore plus logique.
2- Des tonnes d'applications ne vous obligent pas à avoir besoin de ce genre de choses.
Il y a des tonnes d'applications qui n'ont pas vraiment besoin que vous approfondissiez autant de détails. Pourtant, si vous le faites avec un langage qui vous oblige à le faire, vous obtenez:
- Plus de risques d'avoir des bugs dus à ces choses inutiles.
- Plus de coûts de développement, gérer la mémoire et la tester prend du temps et donc de l'argent!
3- La langue est faite sur une pondération de choix coût / usage / risques, comme ... tout.
Avec C ++, vous pouvez faire à peu près ce que vous voulez, c'est le choix des personnes C ++. Cependant, plus il y en a, plus vous devez en gérer.
Donc, des choses comme l'héritage multiple ne sont pas abandonnées au seul fait qu'elles sont dangereuses, elles le sont parce que leur mise en œuvre a un coût (développement, maintenance), tout cela pour une fonctionnalité qui est rarement utilisée correctement et qui peut être utilisée correctement. généralement être réécrit différemment.