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 :

Méthode de classe


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de Pierrot92320
    Homme Profil pro
    Ingénieur en retraite (électronique)
    Inscrit en
    Avril 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur en retraite (électronique)
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 159
    Points : 119
    Points
    119
    Par défaut Méthode de classe
    Bonjour

    Excusez cette question de débutant ...

    Dans mon livre "programmer en Java" il est écrit (page 132) que "une méthode de classe ne peut pas agir sur des champs non statiques". Bon, admettons...

    Mais plus loin dans le livre (page 144) il y a l'exemple suivant de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Point {
    	public Point(int abs, int ord) {
    		x = abs; y = ord;
    	}
    	public static boolean coincide(Point p1, Point p2){
    		p1.x = p2.x; p1.y = p2.y;
    		return ((p1.x == p2.x) && (p1.y == p2.y));
    	}
    	private int x, y;
    }
    On voit que la procédure "coincide" accède aux champs x et y qui ne sont pas statiques. Et le code fonctionne, je l'ai testé.

    Pourriez-vous m'expliquer ce qui m'échappe ?

    Merci de votre aide.
    Pierre
    Pierre
    Je travaille avec Word 2019 sous Windows 10

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Citation Envoyé par Pierrot92320 Voir le message
    "une méthode de classe ne peut pas agir sur des champs non statiques".
    Salut,
    Il manque tout simplement le mot "statique" après méthode:
    une méthode statique de classe ne peut pas agir sur des champs non statiques".

    Voir la f a q Que signifie le mot-clé static ?


    http://java.developpez.com/faq/java/...motsClesStatic

    Cordialement,

    Dan

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par danimo Voir le message
    Salut,
    Il manque tout simplement le mot "statique" après méthode:
    une méthode statique de classe ne peut pas agir sur des champs non statiques".

    Voir la f a q Que signifie le mot-clé static ?


    http://java.developpez.com/faq/java/...motsClesStatic

    Cordialement,

    Dan
    Une méthode de classe est statique (sinon on appelle ça une méthode d'instance), une "méthode statique de classe", c'est un peu comme une "arme à roulette mobile"

    Sinon Pierrot, tu as raison une méthode de classe ne peut accéder aux attributs d'instance mais regarde, ta méthode reçoit deux instances de Point et travaille avec les attribut de ces instances, donc il n'y a pas de problème. Ce qui aurait été illégal c'est décrire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Point {
    	public Point(int abs, int ord) {
    		x = abs; y = ord;
    	}
    	public static void illegal(){
    		x = 3; // sous entendu this.x = 3; or this n'existe pas dans ce cas (méthode de classe)
    	}
    	private int x, y;
    }
    A plus

  4. #4
    Membre régulier Avatar de Pierrot92320
    Homme Profil pro
    Ingénieur en retraite (électronique)
    Inscrit en
    Avril 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur en retraite (électronique)
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 159
    Points : 119
    Points
    119
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Point {
    	public Point(int abs, int ord) {
    		x = abs; y = ord;
    	}
    	public static void illegal(){
    		x = 3; // sous entendu this.x = 3; or this n'existe pas dans ce cas (méthode de classe)
    	}
    	private int x, y;
    }
    Merci George7 je crois que j'ai à peu près compris. Mais pourrais-tu encore préciser deux points :

    1) Je comprends que dans ton exemple l'instruction x = 3 est illégale car x n'est pas défini (on ne sait pas en effet à quelle instance on se réfère) et de plus il est interdit d'employer la syntaxe "this.x". C'est bien cela ? Maintenant je vais tenter de comprendre pourquoi l'emploi du mot "this" est interdit :o)

    2) Tu confirmes que "une méthode de classe ne peut pas accéder aux champs non statiques". Pour être plus précis, pourrait-on dire qu'elle est dans l'incapacité de le faire car elle ne sait pas sur quel objet il faut travailler. Par contre, si on lui passe l'objet en argument, comme dans mon exemple, elle a tout à fait accès aux champs, même privés, des objets.

    Pierre
    Pierre
    Je travaille avec Word 2019 sous Windows 10

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Pierrot92320 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Point {
    	public Point(int abs, int ord) {
    		x = abs; y = ord;
    	}
    	public static void illegal(){
    		x = 3; // sous entendu this.x = 3; or this n'existe pas dans ce cas (méthode de classe)
    	}
    	private int x, y;
    }
    Merci George7 je crois que j'ai à peu près compris. Mais pourrais-tu encore préciser deux points :

    1) Je comprends que dans ton exemple l'instruction x = 3 est illégale car x n'est pas défini (on ne sait pas en effet à quelle instance on se réfère) et de plus il est interdit d'employer la syntaxe "this.x". C'est bien cela ? Maintenant je vais tenter de comprendre pourquoi l'emploi du mot "this" est interdit :o)
    Quand dans une méthode tu écris
    et que x n'est pas une variable locale ou un paramètre mais un attribut, c'est la même chose que d'écrire
    Or tu es dans une méthode de classe (ou statique), ce qui veut dire que this n'existe pas dans ce contexte (this réfère a l'instance dans laquelle tu te trouves, or tu n'est pas dans une instance). Une méthode de classe, comme son nom l'indique, se réfère à une classe (sans état interne) et pas à une instance. Une telle méthode est donc complètement indépendante des instances.
    Citation Envoyé par Pierrot92320 Voir le message
    2) Tu confirmes que "une méthode de classe ne peut pas accéder aux champs non statiques". Pour être plus précis, pourrait-on dire qu'elle est dans l'incapacité de le faire car elle ne sait pas sur quel objet il faut travailler. Par contre, si on lui passe l'objet en argument, comme dans mon exemple, elle a tout à fait accès aux champs, même privés, des objets.

    Pierre
    Le fait que ta méthode ait accès aux champs privés vient du fait que en Java, à l'intérieur d'une classe (donc en en connaissant la structure interne) tu peux accéder aux attributs théoriquement non visible d'autres instances de cette même classe. Ici tu es dans Point et tu récupères des Point dont tu connais la structure.

  6. #6
    Membre régulier Avatar de Pierrot92320
    Homme Profil pro
    Ingénieur en retraite (électronique)
    Inscrit en
    Avril 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur en retraite (électronique)
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 159
    Points : 119
    Points
    119
    Par défaut
    Merci George7 pour ces explications très claires.

    Pierre
    Pierre
    Je travaille avec Word 2019 sous Windows 10

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. méthode et classes
    Par abbd dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 22h31
  2. Réponses: 1
    Dernier message: 09/03/2006, 18h15
  3. Réponses: 4
    Dernier message: 29/01/2006, 17h54
  4. Forme d'appel de méthode réservé méthodes de classe
    Par Chicobrasil dans le forum Langage
    Réponses: 16
    Dernier message: 03/01/2006, 17h43
  5. [C#] Ajout d'une méthode à la classe DropDownList
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/08/2005, 14h23

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