


Les variables en Java ne suivent pas le polymorphisme et la substitution
Dans le monde de la programmation orientée objet (POO), le polymorphisme et la réécriture sont des concepts clés qui apportent flexibilité et vitalité aux langages de programmation. Java, étant un langage POO puissant, prend entièrement en charge ces fonctionnalités. Cependant, il est crucial de comprendre que ces caractéristiques s’appliquent aux méthodes Java et non aux variables. Dans cet article, nous explorerons pourquoi les variables en Java ne suivent pas le polymorphisme et la substitution pour mieux comprendre le comportement des variables de Java.
Polymorphisme en Java
Le polymorphisme est un mot grec signifiant « plusieurs formes » et constitue un concept de base de la POO. Il permet à des objets de différents types d'être traités comme des objets d'un supertype commun, permettant ainsi d'écrire du code plus flexible et réutilisable. En Java, le polymorphisme est obtenu grâce à l'héritage, aux interfaces et au remplacement de méthodes.
Exemple
Voyons un exemple
class Animal { void sound() { System.out.println("The animal makes a sound"); } } class Cat extends Animal { @Override void sound() { System.out.println("The cat meows"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Cat(); myAnimal.sound(); } }
Sortie
The cat meows
Dans ce scénario, myAnimal est la variable de référence Animal pointant vers l'objet Cat. Lorsque la méthode sound() est appelée sur myAnimal, la version de la classe Cat est appelée, pas la version de la classe Animal. Il s'agit d'un polymorphisme, dans lequel la méthode à appeler est déterminée par le type d'objet réel et non par le type de référence.
Réécriture en Java
Le remplacement de méthode est une forme spécifique de polymorphisme en Java, où une sous-classe fournit une implémentation spécifique d'une méthode définie dans sa superclasse. Les méthodes des sous-classes doivent avoir le même nom, le même type de retour et les mêmes paramètres que les méthodes de la superclasse.
Pourquoi les variables ne suivent-elles pas le polymorphisme et la substitution ?
Pourquoi les variables ne suivent-elles pas le polymorphisme et la substitution ? Contrairement aux méthodes, les variables en Java ne suivent pas les concepts de polymorphisme et de substitution. Cette différence provient de différences fondamentales dans la façon dont les méthodes et les variables existent et fonctionnent dans les objets
En Java, les variables d'instance appartiennent aux instances d'une classe, ce qui signifie que chaque instance a sa propre copie de la variable d'instance. Par conséquent, la modification de la valeur d’une variable d’instance dans un objet n’affecte pas les autres objets de la même classe.
Les méthodes, en revanche, appartiennent à la classe elle-même et non à une instance spécifique. Cela signifie que les méthodes, contrairement aux variables, n'ont pas de copie distincte pour chaque objet de la classe.
Exemple
Reprenons l'exemple précédent, mais cette fois ajoutons des variables d'instance :
class Animal { String sound = "The animal makes a sound"; void makeSound() { System.out.println(sound); } } class Cat extends Animal { String sound = "The cat meows"; @Override void makeSound() { System.out.println(sound); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Cat(); myAnimal.makeSound(); System.out.println(myAnimal.sound); } }
Sortie
The cat meows The animal makes a sound
Dans ce code, myAnimal est une référence Animal pointant vers l'objet Cat. L'appel de la méthode makeSound() sur myAnimal affichera "Le chat miaule", mais la ligne System.out.println(myAnimal.sound) affichera "L'Animal fait un son". Pourquoi cela arrive-t-il ? Puisque la méthode suit le polymorphisme, la méthode makeSound() de la classe Cat est exécutée. Cependant, comme les variables ne suivent pas le polymorphisme, la "variable sonore" de la classe Animal est utilisée
Ce comportement est dû au principe de masquage variable. Si une variable d'une sous-classe porte le même nom qu'une variable de sa superclasse, la variable de sous-classe masque la variable de superclasse
Cela ne signifie pas que la variable de superclasse a été remplacée. Les deux variables existent toujours indépendamment et la variable utilisée est déterminée par le type de référence et non par le type d'objet réel. C'est pourquoi lorsque nous accédons à la variable sound via la référence Animal, nous obtenons la valeur sonore de la classe Animal au lieu de la classe Cat.
Couverture variable et masquage variable
En Java, les variables ne sont pas affectées par le remplacement de méthodes similaires. Au lieu de cela, ils suivent le principe du masquage des variables. Il existe une différence fondamentale entre le masquage de variables et le remplacement de méthode :
Method Overriding - En remplacement, une sous-classe fournit une implémentation différente d'une méthode déjà définie dans sa superclasse. La décision quant à la méthode à appeler est basée sur le type de l'objet réel, plutôt que sur le type de référence, ce qui permet le polymorphisme.
Masquage de variable - Lors du masquage de variable, si une variable d'une sous-classe a le même nom qu'une variable de sa superclasse, la variable de sous-classe masquera la variable de superclasse. La décision quant à la variable à utiliser est basée sur le type de référence et non sur le type de l'objet réel.
Ces principes découlent du fait que les méthodes représentent le comportement, tandis que les variables représentent l'état. Le comportement peut être polymorphe et remplacé, permettant à différents types d'objets d'avoir des comportements différents. En revanche, l’état représenté par une variable appartient à une instance spécifique et n’est pas polymorphe.
Conclusion
En résumé, comprendre pourquoi les variables en Java ne suivent pas le polymorphisme et la substitution peut fournir des informations importantes sur le fonctionnement de Java. Cette connaissance est cruciale pour les programmeurs Java afin d'éviter les malentendus et les erreurs lors de l'utilisation de l'héritage et du polymorphisme
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.
