Le masquage de variables se produit lorsqu'une sous-classe définit une variable membre portant le même nom qu'une variable membre dans sa superclasse. Contrairement au remplacement de fonction, qui remplace l'implémentation, le masquage de variable masque la variable de superclasse avec une nouvelle variable du même nom.
Considérez le code Java suivant :
public class A { public int intVal = 1; public void identifyClass() { System.out.println("I am class A"); } } public class B extends A { public int intVal = 2; public void identifyClass() { System.out.println("I am class B"); } } public 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(); } }
Sortie :
1 I am class A 1 I am class B
Dans cet exemple, la variable intVal est définie dans les classes A et B. La variable membre de B masque celle de A. Par conséquent, lorsque aRef est défini sur b, la valeur intVal accédée est toujours 1, qui est la valeur par défaut de intVal de A.
Pour accéder à la variable cachée de la superclasse, on peut utiliser super.var ou ((SuperClass)this).var. Par exemple :
aRef = b; System.out.println(aRef.intVal); // Outputs 1, the value of A's intVal System.out.println(((A)aRef).intVal); // Outputs 2, the value of B's intVal
En convertissant explicitement aRef en sa superclasse, nous pouvons accéder à la variable membre masquée.
N'oubliez pas que le masquage de variable permet aux sous-classes de définir leurs propres variables avec les mêmes noms que variables de superclasse, mais il ne les remplace pas complètement. Les deux variables coexistent et la variable de sous-classe masque la variable de superclasse.
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!