Maison >Java >javaDidacticiel >Pourquoi le masquage des variables se produit-il lors du remplacement des variables membres en Java ?
En explorant le concept de substitution de fonctions membres en Java, vous vous êtes aventuré à expérimenter la substitution de variables membres. À cette fin, vous avez créé la structure de classe suivante :
class A { public int intVal = 1; } class B extends A { public int intVal = 2; } class MainClass { public static void main(String[] args) { A a = new A(); B b = new B(); A aRef; aRef = a; System.out.println(aRef.intVal); aRef.identifyClass(); aRef = b; System.out.println(aRef.intVal); aRef.identifyClass(); } }
L'exécution de ce code a produit le résultat suivant :
1 I am class A 1 I am class B
Vous avez exprimé votre confusion quant à la raison pour laquelle aRef.intVal est resté 1 même après avoir été assigné à une instance de classe B. Pour percer ce mystère, comprenez que dans le scénario que vous avez présenté, vous avez affaire à un masquage de variables plutôt qu'à overriding.
En Java, vous pouvez avoir une variable avec le même nom dans une superclasse et une sous-classe. Cette technique de masquage de variable masque efficacement la variable de superclasse. Cependant, les deux variables continuent d'exister indépendamment au sein de leurs classes respectives.
Lorsque vous accédez à la variable à partir d'une référence de la superclasse, vous interagissez avec la variable de la superclasse. La référence elle-même n'est pas affectée par la classe de l'objet vers lequel elle pointe. Par conséquent, même si aRef pointe vers une instance de la classe B, il accède à la variable intVal depuis la classe A car c'est la classe à laquelle appartient aRef.
Pour accéder à la variable intVal depuis la sous-classe (B), vous peut utiliser le mot-clé super, qui fait référence à la superclasse. Cette approche permet de distinguer les variables portant le même nom dans la superclasse et la sous-classe, résolvant ainsi toute ambiguïté.
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!