C++ a l'héritage multiple. La mise en œuvre de l'héritage multiple au niveau de l'assemblage peut être assez compliqué, mais il y a de bonnes descriptions en ligne sur la façon dont cela se fait normalement (vtables, pointeur de corrections, les thunks, etc).
Java n'est pas multiple de mise en œuvre de l'héritage, mais il a de multiples héritage de l'interface, donc je ne pense pas directement à la mise en œuvre avec une vtable unique par classe peut implémenter cette. Comment java implémenter des interfaces à l'interne?
Je me rends compte que, contrairement à C++, Java Jit compilé, des morceaux de code peut être optimisé de façon différente, et différentes machines virtuelles java peut faire les choses différemment. Donc, est-il une stratégie générale que de nombreuses machines virtuelles suivre sur ce, ou personne ne sait la mise en œuvre dans une machine virtuelle java spécifique?
Aussi Jvm souvent devirtualize et en ligne les appels de méthode, auquel cas il n'y a pas vtables ou équivalent impliqué à tous, de sorte qu'il n'aurait pas de sens de demander à propos de réel les séquences de montage qui mettent en œuvre virtuelle/l'interface des appels de méthode, mais je suppose que la plupart des machines virtuelles toujours garder une sorte de représentation générale de classes autour de l'utilisation si ils n'ont pas été en mesure de devirtualize tout. Cette hypothèse est erronée? Cette représentation regarder en quelque sorte comme un C++ vtable? Si faire des interfaces de séparer les vtables et comment sont-ils liés à la classe vtables? Si oui, peut instances d'objet de plusieurs vtable des pointeurs (pour la classe/interface vtables) comme des instances de l'objet en C++? Ne les références d'un type de classe et un type d'interface pour le même objet ont toujours la même valeur binaire ou pouvez-ci diffèrent comme en C++ où ils ont besoin de pointeur de corrections?
(pour référence: cette question demande quelque chose de semblable à propos de la CLR, et il semble y avoir une bonne explication dans cet article msdn mais qui est peut-être obsolète maintenant. Je n'ai pas été en mesure de trouver quelque chose de semblable pour Java.)
Edit:
- Je veux dire "met en œuvre", dans le sens de "Comment le compilateur GCC mettre en œuvre entier en plus de la fonction / appelle / etc", pas dans le sens de "Java de la classe ArrayList implémente la Liste de l'interface".
- Je suis conscient de la façon dont cela fonctionne à la JVM du bytecode niveau, ce que je veux savoir, c'est quel type de code et structures de données sont générées par la JVM après qu'il est terminé le chargement des fichiers de classe et de la compilation du bytecode.