Est-il possible d'écrire des méthodes virtuelles en Java, comme on le ferait en C ++?
Ou existe-t-il une approche Java appropriée que vous pouvez implémenter et qui produit un comportement similaire? Puis-je avoir quelques exemples?
java
virtual
virtual-functions
Yonatan
la source
la source
Pouvez-vous écrire des fonctions virtuelles en Java?
Oui. En fait, toutes les méthodes d'instance de Java sont virtuelles par défaut. Seules certaines méthodes ne sont pas virtuelles:
Voici quelques exemples:
Fonctions virtuelles "normales"
L'exemple suivant provient d'une ancienne version de la page wikipedia mentionnée dans une autre réponse.
Production:
Exemple avec fonctions virtuelles avec interfaces
Les méthodes d'interface Java sont toutes virtuelles. Ils doivent être virtuels car ils s'appuient sur les classes d'implémentation pour fournir les implémentations de méthode. Le code à exécuter ne sera sélectionné qu'au moment de l'exécution.
Par exemple:
Exemple avec des fonctions virtuelles avec des classes abstraites.
Similaire aux interfaces Les classes abstraites doivent contenir des méthodes virtuelles car elles reposent sur l'implémentation des classes étendues. Par exemple:
la source
Toutes les fonctions de Java sont virtuelles par défaut.
Vous devez faire tout votre possible pour écrire des fonctions non virtuelles en ajoutant le mot-clé «final».
C'est l'opposé de la valeur par défaut C ++ / C #. Les fonctions de classe ne sont pas virtuelles par défaut; vous les rendez ainsi en ajoutant le modificateur "virtuel".
la source
Toutes les méthodes d'instance non privées sont virtuelles par défaut en Java.
En C ++, les méthodes privées peuvent être virtuelles. Cela pourrait être exploité pour l'idiome non-virtual-interface (NVI). En Java, vous devez protéger les méthodes remplaçables NVI.
À partir de la spécification du langage Java, v3:
la source
Oui, vous pouvez écrire des «fonctions» virtuelles en Java.
la source
En Java, toutes les variables et fonctions publiques (non privées) sont virtuelles par défaut. De plus, les variables et fonctions utilisant le mot-clé final ne sont pas virtuelles .
la source