Maison >Java >javaDidacticiel >Pourquoi le masquage des variables se produit-il lors du remplacement des variables membres en Java ?

Pourquoi le masquage des variables se produit-il lors du remplacement des variables membres en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 20:02:10341parcourir

Why Does Variable Hiding Occur When Overriding Member Variables in Java?

Révéler les nuances du masquage de variables 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!

Déclaration:
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