Maison > Java > javaDidacticiel > Pourquoi ma sous-classe Java imprime-t-elle la variable statique de la classe parent au lieu de la sienne ?

Pourquoi ma sous-classe Java imprime-t-elle la variable statique de la classe parent au lieu de la sienne ?

Barbara Streisand
Libérer: 2024-12-01 06:05:20
original
862 Les gens l'ont consulté

Why Does My Java Subclass Print the Parent Class's Static Variable Instead of Its Own?

Remplacer les variables de classe en Java : un mystère caché

La question découle d'un extrait de code intrigant qui tourne autour d'une hiérarchie de classes, en particulier autour de une classe parent nommée Papa et sa classe enfant, Son. Les deux classes possèdent une variable de classe nommée me, destinée à représenter leur identité. Cependant, le problème survient lorsque la méthode doIt(), qui instancie un objet Son et appelle sa méthode printMe(), imprime « papa » au lieu du « fils » attendu.

Les variables de classe peuvent-elles être Remplacé ?

Pour répondre à cette question, nous approfondissons le concept d'héritage et de remplacement en Java. La substitution fait référence à la capacité d'une sous-classe à modifier le comportement d'une méthode définie dans sa superclasse. Cependant, ce concept ne s'étend pas aux variables de classe.

Masquage ou remplacement

Dans le cas des variables de classe, ce qui se passe n'est pas un remplacement mais plutôt un "masquage". " Lorsqu'une sous-classe déclare une variable de classe portant le même nom qu'une variable de sa superclasse, elle masque la variable héritée plutôt que de la remplacer. La variable cachée est effectivement masquée au sein de la sous-classe.

La valeur cachée

Revenant à l'exemple, la déclaration de me dans Son cache la variable me héritée de Papa. Cependant, la variable cachée dans Papa conserve sa valeur, « papa », et est celle qui est accédée et imprimée dans la méthode printMe().

Solution alternative

Pour obtenir le résultat souhaité en imprimant « fils », une approche alternative consiste à utiliser des variables d'instance (variables non statiques) définies dans le constructeur de la classe enfant. Cette méthode permet à la sous-classe d'avoir sa propre identité distincte sans affecter la variable de classe de sa superclasse.

Conclusion

En substance, il n'existe aucun mécanisme direct pour remplacer la classe variables en Java. La relation entre une sous-classe et sa superclasse implique le masquage et l'héritage, permettant à la sous-classe d'avoir ses propres caractéristiques uniques sans modifier les valeurs d'origine de la classe parent. Dans les cas où des identités distinctes sont souhaitées, l'utilisation de variables d'instance offre une solution plus appropriée.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal