Qu'entend-on par stratégie de résolution de table virtuelle utilisée par JVM? Quelqu'un peut-il expliquer en détail?Java Interfaces
Répondre
Fondamentalement, toute méthode qui n'est pas déclarée final
peut être remplacée dans n'importe quelle classe héritante. Une stratégie de résolution de table virtuelle est la façon dont Java envoie de manière dynamique les appels de méthodes à la définition de méthode du type d'exécution de l'objet. Par exemple, si vous avez un objet s
déclaré comme étant de type Shape
mais instancié comme new Circle()
(par exemple Shape s = new Circle()
) et que vous appelez s.draw()
... si Cercle remplace draw
, vous voulez que la version de Circle de la méthode draw soit invoquée et non la version Shape de cette méthode. Cette information ne peut être trouvée qu'à l'exécution (si un objet Shape est passé, il peut être passé depuis un JAR que le compilateur ne voit jamais, donc le compilateur n'a aucun moyen de déterminer quelle sous-classe spécifique de Shape a été instanciée), et il appartient donc à la VM d'envoyer l'invocation de la méthode à la bonne définition de la méthode (dans ce cas, la version de draw fournie par Circle). Avec la plupart des implémentations d'une table virtuelle, chaque classe a une table où chaque entrée est une fonction membre et son adresse correspondante. Ainsi, la table virtuelle pour Cercle et Forme aurait une entrée dans la table pour "dessiner", mais la table virtuelle pour Cercle et Forme a chacun l'entrée pour dessiner pointent vers leurs définitions respectives de cette fonction. Ensuite, chaque instance de la classe pointe vers la table virtuelle de sa classe donnée. Ainsi, lorsque vous faites new Circle()
, il contient une entrée pointant vers la table virtuelle de Circle. Lorsqu'une méthode qui n'est pas déclarée final
est invoquée, les implémentations de méthode appropriées sont appelées en recherchant le décalage approprié dans la table virtuelle de l'objet.
- 1. Java - Interfaces
- 2. Java: différentes interfaces génériques
- 3. interfaces java ... questions rapides
- 4. java: interfaces et modèles
- 5. question sur les interfaces java
- 6. Possibilité de spécifier plusieurs interfaces en Java
- 7. Java interfaces génériques avec les implémentations Typesafe
- 8. Interfaces Java ... Mémoire dynamique ou statique?
- 9. Java erreur de compilation avec des interfaces
- 10. Problème avec les interfaces en Java
- 11. Interfaces internes?
- 12. Interfaces standard
- 13. Java: Les interfaces peuvent-elles contenir des variables constantes définies dans ces interfaces?
- 14. polymorphisme et interfaces
- 15. Bibliothèque Java \ application pour construire des interfaces GUI frontend
- 16. conception en utilisant la composition et les interfaces en Java
- 17. Java/Hibernate utilisant des interfaces sur les entités
- 18. Différences entre les interfaces Java et les protocoles Objective-C?
- 19. Java: Problème simple avec les interfaces et les génériques
- 20. Doit-on toujours coder les interfaces en Java?
- 21. Classe Scala pour implémenter deux interfaces Java - comment?
- 22. Puis-je créer des interfaces de type Java dans Perl?
- 23. méthode par défaut valeur de retour en Java interfaces
- 24. DTO et interfaces
- 25. Utilisation des interfaces dans JNI
- 26. Interfaces .NET
- 27. Interfaces VB.NET
- 28. Interfaces PHP
- 29. Protocoles/Interfaces dans Ruby
- 30. Interfaces fluides en C#