java - Lorsqu'une variable membre portant le même nom est appelée de manière polymorphe, pourquoi la variable membre de la classe parent est-elle consultée?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-12 09:27:03
0
2
985

Je viens de commencer à deviner que puisque les variables membres de la classe parent et de la classe enfant sont chacune stockées dans le tas, cela peut être dû au fait que la classe parent existe, donc les variables membres de la classe parent sont trouvées en premier. Ensuite je l'ai testé et le code est le suivant :

package test;

public class Polymorphism {
    public static void main(String[] args) {
        F f = new Z();
        f.show();
        System.out.println("f:"+f);
        System.out.println("f:"+f.a);
    }
}

abstract class F{
    int a = 10;
    public abstract void show();
}
class Z extends F{
    int a = 5;
    public void show(){
        System.out.println("Z:"+this);
        System.out.println("Z:"+this.a);
    }
}

La sortie est :
Z:test.Z@15db9742
Z:5
f:test.Z@15db9742
f:10

f et this pointent vers le même objet et accèdent à la même variable, mais les résultats sont différents, donc ma supposition ci-dessus doit être fausse. Alors, qu'est-ce qui fait exactement que les appels polymorphes aux variables membres portant le même nom accèdent aux variables membres de la classe parent ?

女神的闺蜜爱上我
女神的闺蜜爱上我

répondre à tous(2)
Ty80

f fait référence aux objets de sous-classe. Je n'ai entendu parler que de méthodes de réécriture et de surcharge, mais pas de variables de classe. Le programme que j'ai exécuté dépend de la situation. Si une méthode est appelée, c'est l'objet réel pointé (l'objet réel ici est une sous-classe de la méthode d'objet). Z), si la variable de classe porte le même nom, est la valeur de la variable de classe de l'objet vivant.

扔个三星炸死你

La réécriture, la surcharge et la liaison dynamique des méthodes en Java constituent le polymorphisme. Le polymorphisme est différentes expressions de la même chose.

Votre exemple est le polymorphisme démontré par la réécriture de méthodes.

Ce qui est déclaré est la classe parent F, qui pointe en fait vers sa sous-classe Z. Cela équivaut à une conversion de type vers le haut, car Z est également hérité de F, il peut donc être converti vers le haut.

Donc ici la variable f est instanciée par Z, mais elle est de type F et montre les caractéristiques de F.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal