Maison > Questions et réponses > le corps du texte
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 ?
PHP中文网2017-06-12 09:29:03
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.
扔个三星炸死你2017-06-12 09:29:03
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.