Maison > Java > javaDidacticiel > Les sous-classes Java peuvent-elles remplacer les variables membres ?

Les sous-classes Java peuvent-elles remplacer les variables membres ?

DDD
Libérer: 2024-12-18 18:15:10
original
1008 Les gens l'ont consulté

Can Java Subclasses Override Member Variables?

Remplacer les variables membres en Java : comprendre le masquage des variables

En Java, le remplacement des fonctions membres est un concept bien connu, mais qu'en est-il du remplacement variables membres ? Pour explorer cela, considérons le code 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); // Output: 1
        aRef.identifyClass(); // Output: "I am class A"
        aRef = b;
        System.out.println(aRef.intVal); // Output: 1
        aRef.identifyClass(); // Output: "I am class B"
    }
}
Copier après la connexion

Le code vise à démontrer le comportement des variables membres remplacées. Cependant, il y a un casse-tête : pourquoi aRef.intVal renvoie-t-il toujours 1 après que aRef est défini sur b, qui a un intVal de 2 ?

La réponse réside dans le concept de masquage de variables. Lorsqu'une sous-classe déclare une variable portant le même nom qu'une variable de sa superclasse, elle "masque" la variable de la superclasse. Cela signifie que la sous-classe a deux variables : une de sa superclasse et une de sa propre définition.

Dans le code ci-dessus, la variable membre intVal est déclarée à la fois dans A et B. Par conséquent, lorsque B est créé, il a les deux intVals - un avec une valeur de 1 hérité de A et un avec une valeur de 2 définie dans B.

Lorsque aRef est défini sur a, il fait référence au intVal de A. Lorsque aRef est défini sur b, il fait toujours référence à l'intVal de A. En effet, dans l'expression aRef.intVal, aRef se résout en type A et intVal est une variable de A.

Pour accéder à l'intVal de B, il faudrait utiliser ((B)aRef).intVal, qui convertit explicitement aRef en type B et permet d'accéder aux B. variables.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal