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
Libérer: 2024-12-20 20:02:10
original
337 Les gens l'ont consulté

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();
    }
}
Copier après la connexion

L'exécution de ce code a produit le résultat suivant :

1
I am class A
1
I am class B
Copier après la connexion

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!

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