this
this est un objet de lui-même, représentant l'objet lui-même. On peut le comprendre comme :Un pointeur vers l'objet lui-même。
L'utilisation de this en Java peut être grossièrement divisée en 3 types :
1. Référence directe ordinaire
Pas besoin de développer ce point ; this équivaut à pointer vers l'objet courant lui-même.
2. Lorsque les paramètres formels ont le même nom que les membres, utilisez this pour les distinguer :
Exemple
Sortie :
初始化年龄:10 Harry's age is 12
On peut voir qu'ici age est le paramètre formel de la méthode membre GetAge, et this.age est la variable membre de la classe Person.
3. Référence aux constructeurs
Ceci sera abordé avec super, voir ci-dessous.
super
super peut être compris comme un pointeur vers l’objet de sa classe super (parente), et cette classe super fait référence à la classe parente la plus proche.super a également trois utilisations :
1. Référence directe ordinaire
Semblable à this, super équivaut à pointer vers la classe parente de l’objet courant, donc vous pouvez utilisersuper.xxxpour référencer les membres de la classe parente.
2. Lorsque les variables membres ou les méthodes de la sous-classe ont le même nom que celles de la classe parente
Exemple
Sortie :
Shanghai China
On peut voir qu'ici, à la fois la méthode de la classe parente et la variable de la classe parente sont appelées. Si la méthode value() de la classe parente n'est pas appelée et que seule la variable name de la classe parente est appelée, alors la valeur de name de la classe parente sera la valeur par défaut null.
3. Référence aux constructeurs
- super(parameters): Appeler un constructeur dans la classe parente (doit être la première instruction du constructeur).
- this(parameters): Appeler une autre forme de constructeur dans cette classe (doit être la première instruction du constructeur).
Exemple
Sortie :
父类·无参数构造方法: A Person. 子类·调用父类”无参数构造方法“: A chinese coder. 父类·含一个参数的构造方法: A person's name is codersai 子类·调用父类”含一个参数的构造方法“: his name is codersai 父类·含一个参数的构造方法: A person's name is codersai 子类·调用父类”含一个参数的构造方法“: his name is codersai 子类:调用子类具有相同形参的构造方法:his age is 18
À partir de cet exemple, nous pouvons voir que super et this peuvent être utilisés pour appeler respectivement le constructeur de la classe parente et d'autres formes de constructeurs dans cette classe.
Dans l'exemple, le troisième constructeur de la classe Chinese appelle le deuxième constructeur de cette classe, et le deuxième constructeur appelle la classe parente. Par conséquent, le constructeur de la classe parente doit être appelé en premier, puis le deuxième constructeur de cette classe, et enfin le troisième constructeur est réécrit.
Similarités et différences entre super et this
- super(paramètres) : Appelle un constructeur de la classe de base (doit être la première instruction du constructeur)
- this(paramètres) : Appelle une autre forme de constructeur dans cette classe (doit être la première instruction du constructeur)
- super : il référence les membres de la classe parente directe de l'objet courant (utilisé pour accéder aux données membres ou aux fonctions de la classe parente masquées dans la classe parente directe. Lorsque la classe de base et la classe dérivée ont les mêmes définitions de membres, par ex., super.variableName super.memberFunctionName(actual parameters)). this : il représente le nom de l'objet courant (là où l'ambiguïté peut facilement se produire dans le programme, utilisez this pour indiquer l'objet courant ; si les paramètres formels de la fonction ont le même nom que les données membres de la classe, utilisez this pour indiquer le nom de la variable membre).
- L'appel à super() doit être écrit comme première ligne du constructeur de la sous-classe, sinon la compilation échouera. La première instruction de chaque constructeur de sous-classe appelle implicitement super(). Si la classe parente n'a pas de constructeur de cette forme, une erreur sera signalée lors de la compilation.
- super() et this() sont similaires. La différence est que super() appelle le constructeur de la classe parente depuis la sous-classe, tandis que this() appelle d'autres méthodes au sein de la même classe.
- super() et this() doivent tous deux être placés en première ligne du constructeur.
- Bien que this puisse être utilisé pour appeler un constructeur, il ne peut pas en appeler deux.
- this et super ne peuvent pas apparaître en même temps dans un constructeur, car this appellera inévitablement un autre constructeur, et cet autre constructeur aura inévitablement une instruction super. Par conséquent, avoir la même instruction dans le même constructeur fait perdre à l'instruction sa signification, et le compilateur ne l'acceptera pas.
- this() et super() font tous deux référence à des objets, ils ne peuvent donc pas être utilisés dans un environnement static. Y compris : les variables static, les méthodes static, les blocs d'instructions static.
- Par essence, this est un pointeur vers cet objet, tandis que super est un mot-clé Java.
Lien original : https://www.cnblogs.com/hasse/p/5023392.html