bonjour
quelqu'un peut m'expliquer avec un exemple simple
les keyword "this" et "super"
je confond :
tous que j'ai vue dans le toile,me complique
aidez moi s'il vous plaît
bonjour
quelqu'un peut m'expliquer avec un exemple simple
les keyword "this" et "super"
je confond :
tous que j'ai vue dans le toile,me complique
aidez moi s'il vous plaît
Le mot-clé this peut être :
- L'instance d'objet en cours :
- L'appel d'un autre constructeur de la classe en cours :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void setX(int x) { this.x = x; }
- (rare) Une notation pour accéder à l'instance en cours d'une classe englobante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public Livre(String titre) { description = titre; } public Livre() { this("Sans titre"); }
En résumé, this a à voir avec l'instance en cours, ou avec la classe en cours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class Englobante { void saySomething() { System.out.println("Je suis Englobante"): } class Interne { Interne() { // Appel à saySomething() de la classe Englobante Englobante.this.saySomething(); } void saySomething() { System.out.println("Je suis Interne"): } } }
Le mot-clé super peut être :
- Une notation pour accéder aux membres, méthodes et classes accessibles à la classe mère, mais qui sont masquées dans la classe en cours :
- Un appel explicite à un constructeur de la classe mère. Une convention Java est que si un constructeur ne fait pas appel à super(...), c'est comme s'il faisait appel au super() sans paramètre : le constructeur par défaut de la classe mère. Si la classe mère n'a pas de constructeur par défaut, un appel à l'un de ses constructeurs avec super est obligatoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Mere { protected int x = 10; } class Fille extends Mere { protected String x = "Hello"; Fille() { // x est une String qui vaut "Hello" et super.x est un int qui vaut 10. System.out.println(x + " " + super.x); } }
En résumé, super a à voir avec la classe mère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Livre { String description; public Livre(String titre) { description = titre; } } class LivreSansTitre extends Livre { public LivreSansTitre() { super("Pas de titre"); } }
bonjour
je comprends bien à quoi sert "this" et "super"
mais je ne sais pas comment placer dans le programme,pouvez vous m'aider
encore plus si ça vous dérange pas
Bonjour,
Les mots clés this et super vont être à utiliser dans les classes concernées.
Quelle est la structure de votre programme ?
je n'ai pas un programme précis,vous donnez vous même un programme quelconque et m'expliquez s'il vous plaît
dans cette exemple
titre de livre est sans titre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public Livre(String titre) { description = titre; } public Livre() { this("Sans titre"); }
est ce que je suis juste?
Je suppose que c'est juste. Mais si tu avais compris ce qui se passe, tu ne le dirais pas comme ça.
Dans l'exemple en question, la classe Livre a deux constructeurs :
- Le constructeur Livre(String titre), qui prend en paramètre une String. Ce constructeur est "normal," le mot-clé this n'y apparaît pas.
- Le constructeur Livre(), sans paramètre. Il contient this("Sans titre"). Cela signifie qu'il appelle le constructeur Livre(String titre), en lui passant comme paramètre la chaîne littérale "Sans titre".
bonjour
passant paramètre ça veut dire il remplace "titre" et met à la place "Sans titre"- Le constructeur Livre(), sans paramètre. Il contient this("Sans titre"). Cela signifie qu'il appelle le constructeur Livre(String titre), en lui passant comme paramètre la chaîne littérale "Sans titre".
ou il ajoute "Sans titre" avec "titre"
C'est deux constructeurs séparé, simplement on les chaines entre eux pour la facilité. Le code donné est l'équivalent de celui-ci
Y a pas d'histoire de concaténation ou autre, on passe un paramètre au constructeur, c'est tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public Livre(String titre) { description = titre; } public Livre() { description = "Sans titre"; }
j'ai compris 1er exemple
maintenant la 2eme:
equivalent ceci??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class Englobante { void saySomething() { System.out.println("Je suis Englobante"): } class Interne() { Interne() { // Appel à saySomething() de la classe Englobante Englobante.this.saySomething(); } void saySomething() { System.out.println("Je suis Interne"): } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class Englobante { void saySomething() { System.out.println("Je suis Englobante"): } class Interne() { Interne() { System.out.println("Je suis Interne"): } void saySomething() { System.out.println("Je suis Interne"): } } }
non, équivalent à ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Englobante { void saySomething() { System.out.println("Je suis Englobante"): } class Interne() { Interne() { System.out.println("Je suis Englobante"): } void saySomething() { System.out.println("Je suis Interne"): } }
sert à quoi? s'il te plaît
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void saySomething() { System.out.println("Je suis Interne"): }
Vous pourriez ainsi faire ceci :
Remarque : attention aux ";" et non ":" en fin de ligne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class Englobante { void saySomething() { System.out.println("Je suis Englobante"); } class Interne() { Interne() { Englobante.this.saySomething(); System.out.println("En fait c'est faux. Ceci par contre est vrai : "); this.saySomething(); } void saySomething() { System.out.println("Je suis Interne"); } }
resultat de ce progromme est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Mere { protected int x = 10; } class Fille extends Mere { protected String x = "Hello"; Fille() { // x est une String qui vaut "Hello" et super.x est un int qui vaut 10. System.out.println(x + " " + super.x); } }
Hello 10
n'est ce pas?
oui,
tu sais, au lieu de nous poser la question, tu aurais tes réponse plus rapidement en tappant ce code et en le compilant![]()
merci beaucoup,j'écris le programme tel qu'il est, mais il n'y a aucune résultat,
il faut ajouter quelque chose !!!
Pas faux, je n'ai pas fait des programmes complets, juste des exemples d'utilisation des mots-clés.
Mais bon... Ça devrait pas être insurmontable de prendre ces bouts de code et voir comment jouer avec. Débuter ça veut pas dire ne rien savoir du tout du tout du tout. En particulier pas quand on s'intéresse à this et super.
Avez-vous fait un main ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class Mere { public static void main(String[]args) { protected int x = 10; } System.out.println(x + " " + super.x); } public class Fille extends Mere{ protected String x = "Hello"; Fille() { // x est une String qui vaut "Hello" et super.x est un int qui vaut 10. System.out.println(x + " " + super.x); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class Mere { public static void main(String[]args) { protected int x = 10; // variable locale à main, pas un attribut de Mere } System.out.println(x + " " + super.x); // code en dehors de toute méthode, illegal. De plus, super.x n'a aucun sens ici } public class Fille extends Mere{ // classe fille jamais utilisé nulle part protected String x = "Hello"; Fille() { // x est une String qui vaut "Hello" et super.x est un int qui vaut 10. System.out.println(x + " " + super.x); // super.x n'existe pas (voir commentaire plus haut) } }
Partager