this
et
super
sont deux mots-clés spéciaux en Java qui représentent respectivement l'instance actuelle d'une classe et sa superclasse. Les programmeurs Java confondent souvent ces mots et se montrent peu conscients de leurs propriétés particulières, qui sont souvent évoquées lors des entretiens avec Java Core. Par exemple, quelques questions qui me viennent immédiatement à l’esprit concernent
this
et
super
: est-il possible d’attribuer une signification différente à un mot-clé
this
en Java ? et quelle est la différence entre les mots-clés
this
et
super
en Java. Ne sait pas? Eh bien, je ne donne pas la réponse ici, elle se trouve à la fin de l’article.
Ainsi, comme je l'ai dit au début, la principale différence entre
this
et
super
en Java est que
this
l'instance actuelle d'une classe représente, tandis que
super
l'instance actuelle de la classe parent représente. Voici un exemple d'utilisation de variables
this
et
super
- vous avez probablement déjà vu des exemples d'appel de constructeurs les uns aux autres, ce qu'on appelle. appeler des constructeurs dans une chaîne, cela est possible grâce à l'utilisation de mots-clés
this
et
super
. À l'intérieur d'une classe, pour appeler son constructeur sans argument, on utilise
this()
, alors
super()
qu'il est utilisé pour appeler le constructeur sans argument, ou comme on l'appelle aussi, le constructeur par défaut de la classe parent. À propos, vous pouvez ainsi appeler non seulement un constructeur sans arguments, mais également n'importe quel autre constructeur en lui transmettant les paramètres appropriés. Nous verrons bientôt un exemple de cette
this
utilisation
super
. Également en
this
Java,
super
ils sont utilisés pour accéder aux variables d'une instance de classe et de son parent. En fait, elles sont accessibles sans les préfixes
super
et
this
, mais seulement si dans le bloc actuel ces variables ne chevauchent pas d'autres variables, c'est-à-dire s'il ne contient pas de variables locales portant les mêmes noms, sinon vous devrez utiliser des noms avec des préfixes, mais cela n'a pas d'importance, car sous cette forme, ils sont encore plus lisibles. Un exemple classique de cette approche consiste à utiliser
this
un constructeur à l'intérieur qui prend un paramètre portant le même nom que la variable d'instance. Plus loin dans l'article, nous découvrirons quelles sont les autres différences entre
super
et
this
et examinerons quelques exemples de leur utilisation.
En quoi ceci et super sont similaires
Avant d'examiner les différences entre les mots-clés
this
et
super
, examinons certaines de leurs similitudes :
- Les deux
this
, et super
sont des variables non statiques, ils ne peuvent donc pas être utilisés dans un contexte statique, ce qui signifie qu'ils ne peuvent pas être utilisés dans la méthode principale. Cela entraînera une erreur de compilation "une variable non statique this
ne peut pas être référencée à partir d'un contexte statique". La même chose se produit si vous utilisez le mot-clé dans la méthode main super
.
- Les deux
this
, et super
peuvent être utilisés à l'intérieur des constructeurs pour appeler d'autres constructeurs dans une chaîne, par exemple, this
() et super
() appellent le constructeur sans arguments des classes héritières et parentes, respectivement.
Dans l'exemple ci-dessous, nous passons d'abord un appel d'un constructeur sans argument de classe B à un constructeur de la même classe B qui prend un seul paramètre de type
String
, qui à son tour
super("")
appelle le constructeur à un argument de la superclasse.
class A{
A(){
System.out.println("Конструктор без аргументов класса A");
}
A(String args){
System.out.println("Конструктор с одним аргументом класса A");
}
}
class B extends A{
B(){
this("");
System.out.println("Конструктор без аргументов класса B");
}
B(String args){
super("");
System.out.println("Конструктор с одним аргументом класса B");
}
}
public class Test {
public static void main(String args[]) {
B b = new B();
}
}
Sortie : Constructeur à un argument de la classe A Constructeur à un argument de la classe B Constructeur sans argument de la classe B
- À l'intérieur du constructeur
this
, et super
doit apparaître au-dessus de toutes les autres expressions, au tout début, sinon le compilateur émettra un message d'erreur. D'où il s'ensuit qu'un constructeur ne peut pas contenir à la fois this()
, et super()
.
Différences entre super et ça
Nous savons maintenant comment utiliser les mots-clés
super
et
this
comprenons pourquoi ils sont nécessaires. Mais il existe une autre option pour utiliser ces mots-clés, que je n'ai pas mentionnée - dans les classes internes, où, avec leur aide, il est très pratique de se référer à une classe externe en utilisant le formulaire de notation externe.
this
pour son instance actuelle et Outer.
super
- pour ses parents. N'oubliez pas de remplacer Outer par le nom de la classe externe. Énumérons maintenant brièvement les principales différences entre les mots-clés
this
et
super
- une variable
this
fait référence à l'instance actuelle de la classe dans laquelle elle est utilisée, alors qu'elle fait super
référence à l'instance actuelle de la classe parent.
- Chaque constructeur, en l'absence d'appels explicites à d'autres constructeurs, appelle implicitement
super()
le constructeur sans argument de sa classe parent, mais vous avez toujours la possibilité d'appeler explicitement n'importe quel autre constructeur avec this()
, ou super()
.
C'est probablement tout ce que l'on peut dire sur les différences entre les mots-clés
this
et
super
en Java et sur la manière dont ils sont utilisés dans les programmes. Comme nous l'avons vu, leur objectif principal est d'appeler un constructeur à partir d'un autre et de faire référence aux variables d'instance déclarées dans la classe actuelle et sa classe parent. N'oubliez pas que ce ne sont pas exactement des variables ordinaires, et maintenant - la réponse à ma question, que j'ai posée dans le premier paragraphe. Non, une variable
this
ne peut pas recevoir de nouvelle valeur car elle est déclarée finale. Vous pouvez essayer de le faire dans l'EDI - vous recevrez une erreur de compilation "vous ne pouvez pas attribuer une nouvelle valeur à une variable
this
- elle est déclarée finale".
Article original ici .
GO TO FULL VERSION