Quelle est la différence entre les mots clés this
et super
?
Les deux sont utilisés pour accéder aux constructeurs de classe non? L'un de vous peut-il expliquer?
Quelle est la différence entre les mots clés this
et super
?
Les deux sont utilisés pour accéder aux constructeurs de classe non? L'un de vous peut-il expliquer?
Considérons cette situation
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void anotherEat() {
super.eat();
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eat();
d.anotherEat();
}
}
La sortie va être
animal : eat
dog : eat
animal : eat
La troisième ligne affiche "animal: manger" parce que nous appelons super.eat()
. Si nous avions appelé this.eat()
, cela aurait été imprimé "chien: manger".
super
est utilisé pour accéder aux méthodes de la classe de base tandis que this
est utilisé pour accéder aux méthodes de la classe actuelle.
En étendant la notion, si vous écrivez super()
, cela fait référence au constructeur de la classe de base, et si vous écrivez this()
, cela fait référence au constructeur de la classe même où vous écrivez ceci code.
this
est une référence à l'objet saisi au cours actuel, et super
est une référence à l'objet typé en tant que parent de la classe.
Dans le constructeur, this()
appelle un constructeur défini dans la classe en cours. super()
appelle un constructeur défini dans la classe parent. Le constructeur peuvent être définies dans la classe parent, mais il va se réfèrent à un substituée la plus proche de la classe en cours. Les appels vers d'autres constructeurs peuvent être effectuées uniquement la première ligne dans un constructeur.
L'appel de méthodes fonctionne de la même manière. Appelant this.method()
appelle une méthode de la classe actuelle où l' super.method()
qui fera appel à la même méthode, telle que définie dans la classe parent.
D'après votre question, j'en déduis que vous êtes vraiment se demander à propos de l'utilisation de this
et super
dans le constructeur de chaînage; par exemple
public class A extends B {
public A(...) {
this(...);
...
}
}
rapport
public class A extends B {
public A(...) {
super(...);
...
}
}
La différence est simple:
L' this
former des chaînes à un constructeur de la classe en cours; c'est à dire dans l' A
classe.
L' super
former des chaînes à un constructeur dans l'immédiat super-classe; c'est à dire dans l' B
classe.
this
se réfère à un état de référence de l' actuelle classe. super
fait référence à la mère de la classe actuelle (qui a appelé à la super
mot-clé).
En faisant this
, il permet l'accès aux méthodes et attributs de la classe actuelle (y compris de sa propre salle de méthodes et attributs).
super
vous permet d'accéder public/protected méthode attributs/des parent(de base) de la classe. Vous ne pouvez pas voir le parent privé de la méthode/attributs.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.