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!