Considérer:
classe TestParent{
public int i = 100;
public void printName(){
System.err.println(this); //{TestChild@428} selon le Debugger.
System.err.println(this.i); //this.i est 100.
}
}
classe TestChild étend TestParent{
public int i = 200;
}
public class ThisTest {
public static void main(String[] args) {
new TestChild().printName();
}
}
Je sais que des questions similaires ont été posées, mais je n'ai pas réussi à comprendre fermement la variable 'this' en Java.
Laissez-moi essayer d'expliquer comment je comprends le résultat de l'image ci-dessus.
-
Étant donné qu'un objet
new TestChild()
appelle la méthodeprintName()
, la variablethis
à la ligne 6 est définie sur un objetTestChild
- {TestChild@428} selon le Debugger. -
Cependant, comme Java n'a pas de champ virtuel - je ne suis pas complètement sûr de ce que cela signifie, mais je le comprends conceptuellement comme étant l'opposé des méthodes Java, qui prennent en charge le polymorphisme -
this.i
est défini à 100 deTestParent
au moment de la compilation. -
Donc, peu importe ce que
this
est,this.i
dans une méthodeTestParent
sera toujours la variablei
dans la classeTestParent
.
Je ne suis pas sûr que ma compréhension soit correcte, donc veuillez me corriger si je me trompe.
Et aussi, ma question principale est,
Comment la variable this
est-elle définie sur l'objet actuel qui appelle la méthode? Comment est-elle réellement implémentée?