IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Mots clé 'this' et 'super'


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut Mots clé 'this' et 'super'
    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

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Le mot-clé this peut être :
    - L'instance d'objet en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void setX(int x) {
      this.x = x;
    }
    - L'appel d'un autre constructeur de la classe en cours :
    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");
    }
    - (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
    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"):
        }
     
      }
    }
    En résumé, this a à voir avec l'instance en cours, ou avec la classe en cours.


    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 :
    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);
      }
    }
    - 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
    12
    class Livre {
      String description;
      public Livre(String titre) {
        description = titre;
      }
    }
     
    class LivreSansTitre extends Livre {
      public LivreSansTitre() {
        super("Pas de titre");
      }
    }
    En résumé, super a à voir avec la classe mère.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    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

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour,
    Les mots clés this et super vont être à utiliser dans les classes concernées.
    Quelle est la structure de votre programme ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    je n'ai pas un programme précis,vous donnez vous même un programme quelconque et m'expliquez s'il vous plaît

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    dans cette exemple
    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");
    }
    titre de livre est sans titre
    est ce que je suis juste?

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    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".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    bonjour
    - 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".
    passant paramètre ça veut dire il remplace "titre" et met à la place "Sans titre"
    ou il ajoute "Sans titre" avec "titre"

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est deux constructeurs séparé, simplement on les chaines entre eux pour la facilité. Le code donné est l'équivalent de celui-ci

    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";
    }
    Y a pas d'histoire de concaténation ou autre, on passe un paramètre au constructeur, c'est tout.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    j'ai compris 1er exemple

    maintenant la 2eme:
    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"):
        }
     
      }
    }
    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
     
    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"):
        }
     
      }
    }

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    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"):
        }
     
      }

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void saySomething() {
          System.out.println("Je suis Interne"):
        }
    sert à quoi? s'il te plaît

  13. #13
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Vous pourriez ainsi faire 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
    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");
        }
     
      }
    Remarque : attention aux ";" et non ":" en fin de ligne !

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    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);
      }
    }
    resultat de ce progromme est
    Hello 10

    n'est ce pas?

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    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

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    merci beaucoup,j'écris le programme tel qu'il est, mais il n'y a aucune résultat,
    il faut ajouter quelque chose !!!

  17. #17
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    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.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Avez-vous fait un main ?

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    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);
      }
    }

  20. #20
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    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)
      }
    }

Discussions similaires

  1. Définition de classe en vba : mot clé this ?
    Par LiTiL_DiViL dans le forum Général VBA
    Réponses: 1
    Dernier message: 21/08/2009, 14h03
  2. Mot clé this classe javascript
    Par Delprog dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/03/2009, 14h51
  3. mot clé this
    Par grospatapouf dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 15/07/2008, 13h49
  4. mot clé this
    Par henpower dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 10/04/2008, 13h05
  5. Réponses: 7
    Dernier message: 08/01/2006, 21h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo