This !

Résolu/Fermé
chaa13 - 27 juin 2013 à 15:45
 chaa13 - 28 juin 2013 à 18:14
Hey,
J'ai du mal a voir l'intérêt du "this" en java ! Par exemple quand je suis dans ma classe, je peux très bien mettre : "this.accélération" mais si je met juste "accélération" ça marche aussi. Donc j'ai du mal a voir son intérêt. Quelqu'un peut m'éclairer ?
Merci d'avance ^^



4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 27/06/2013 à 16:23
Effectivement, this est généralemet implicite donc dans bien des cas on ne le mets pas, cependant il est parfois nécessaire d'y avoir accès quand même par exemple comme paramètre d'une méthode :

public class MaClasse
{
    void uneMethode(MonObjet obj)
    {
        ...
    }
}

public class MonObjet
{
    void uneAutreMethode()
    {
        MaClasse m = new MaClasse();
        m.uneMethode(this);
    }
}

Autre cas d'utilisation : comme je l'ai dit le this est généralement implicite, mais les paramètres sont prioritaires par rapport aux membres de classes, ce qui nécessite de faire attention lorsque deux variables ont le même nom, on trouve généralement cela dans les constructeur et les setteurs :

public class MaClasse
{
    private MonObjet obj; // obj_membre

    public MaClasse(MonObjet obj) // obj_parametre
    {
         this.obj = obj; // obj_membre = obj_parametre
    }
}

Il y a encore d'autres cas d'utilisations, parfois plus tordus, exemple avec des classes imbriquées où le this peut faire référence à l'une ou l'autre des classes de sa hiérarchie, dans ce cas on le précède du nom de la classe (la plus interne est implicite)

public class A
{
    int x;

    class B
    {
        int x;

        void methode()
        {
            B.this.x = A.this.x; // Remarque : B.this.x == this.x == x
        }
    }
}
La confiance n'exclut pas le contrôle
2
Ok merci beaucoup je vois ! Enfin c'est un peu flou dans le première exemple mais sinon ça va !
En gros c'est pas indispensable de le mettre ^^
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > chaa13
Modifié par KX le 27/06/2013 à 16:51
C'est bizarre, pour moi le premier exemple est le plus évident, c'est vraiment le cas où on est obligé de mettre un this (dans les deux autres cas on pourrait par exemple changer les noms des variables et s'en sortir sans this)

Peut-être que l'exemple bidon n'aide effectivement pas à comprendre, en voici un j'espère plus compréhensible :

public class Souris
{
    public void etreMange(Chat c)
    {
        // la souris est mangé par le chat
        mourrir();
    }
}

public class Chat
{
    public void manger(Souris s)
    {
        // le chat mange la souris
        s.etreMange(this);
    }
}
0
Oui en effet c'est beaucoup plus clair ;)
Merci pour tout !
0
Bonjour,

je t'invite à lire ce blog


http://blog.paumard.org/cours/java/chap04-structure-classe-classe.html#d0e2135

Bon courage

Cordialement
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
27 juin 2013 à 22:12
Bonjour,

Il y a plusieurs utilisation de this, je vais citer deux :

1. Pour différencier les attributs de la classe des variables utilisées dans la méthode, par exemple :

void setA(int a){
     this.a = a;
}

2. Pour utiliser l'objet en cours comme paramettre. Par exemple : soit la classe A suivante :

public class A{
   private B b;
   void setB(B unB){
         this.b = unB;
   }
}

Alors nous avons cette méthode qui nécessite un paramètre de type B, et il se trouve que je peux l'appeler à partir de la classe B elle même :

public class B{
    A creerUnA(){
       A a = new A();
       a.setB(this);
       return a;
    }
}


la méthode creerUnA me permet de créer une instance de la classe A et d'intialiser son champs B par l'objet en cours.

Ceux ci sont deux exemples très simple, pour débutant, vous allez voir par le temps que c'est très important d'avoir ce mot clé.

Bon Courage.
0
Super, merci a vous deux !
0