Maison > Java > javaDidacticiel > En quoi le masquage de variables en Java diffère-t-il du remplacement de fonctions ?

En quoi le masquage de variables en Java diffère-t-il du remplacement de fonctions ?

Linda Hamilton
Libérer: 2024-12-17 08:12:25
original
290 Les gens l'ont consulté

How Does Variable Hiding in Java Differ from Function Overriding?

Comprendre le masquage (remplacement) des variables membres en Java

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

Sortie :

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

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
Copier après la connexion

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!

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