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

Java Discussion :

Accéder aux champs et méthodes d'une classe englobante


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Accéder aux champs et méthodes d'une classe englobante
    Bonjour à tous !

    Malgré mes recherches, je n'ai pas trouvé de réponse, je poste donc ici.
    Il s'agit d'une classe B interne à une classe A, mais je ne trouve pas comment accéder depuis une méthode de B aux champs et méthodes de A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class A {
    	void methode () {}
     
    	private class B {
    		void methodebis () {
    			methode() ; // erreur
    			champ ; // erreur
    			super.methode() ; // erreur
    			super.champ ; // erreur
    		}
     
    	private int champ ;
    }
    Merci d'avance de vos réponses !

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Ta méthode et ta variable dans A sont privées, donc B n'y a pas accès.

    Edit : Je me suis trompé ici.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Merci de cette réponse !
    Je n'y ai pas accès, alors même que toute instance de B est liée à une instance de A ?
    Donc j'imagine que le seul moyen d'y avoir accès tout en empêchant que le code externe de l'apercevoir est de faire une classe anonyme... ce qui est embêtant quand on en a besoin dans plusieurs méthodes de A.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Ce n'est pas super, c'est A.this.champ (ou this.A.champ)

    super, c'est la classe dont on hérite, alors que this est soi-même
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Oublies mes divagations rapides, ce code ci compile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class A {
    	private void methode () {}
    	private  int champ ;
     
    	private class B {
    		void methodebis () {
    			methode();
    			champ=0; // Ici c'est la même chose que la ligne d'en dessous
    			A.this.champ=0; // Il vaut mieux utiliser ceci car si B contient aussi une variable champ alors confusion possible.
    		}
    	}
     }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Merci de vos réponses. Il y aurait-il une explication correspondant à la philosophie du langage Java, pour this.A ? En effet, dans this.A, A n'est pas un attribut de this. Et de plus, que se passerait-il si je déclarais une classe interne A ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A {
    	public methode () {
    		this.A ; // correspond à quoi ?
    	}
     
    	private class A {
    		public methode2 () {
    			this.A ; // correspond à quoi ?
    		}
    	}
    }
    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A {
    	public methode () {
    		this.A ; // correspond à quoi ?
    	}
     
    	private class B {
    		public methode2 () {
    			this.A ; // correspond à quoi ?
    		}
    	}
     
    	private int A;
    }
    Quand à la syntaxe A.this (ou A.attribut), elle me rappelle quelque-chose et correspond à certaines situations bien précises, mais je ne me souviens plus lesquelles.

  7. #7
    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
    Citation Envoyé par collect Voir le message
    Merci de vos réponses. Il y aurait-il une explication correspondant à la philosophie du langage Java, pour this.A ?
    this représente l'instance courante de la classe la plus interne dans laquelle se trouve la ligne de code.

    A.this représente l'instance courante de la class A (permet de référencer A depuis une inner class)

    Quand à this.A, A étant une classe, c'est une erreur de compilation. Seules les méthodes et les attributs sont accessibles via un this.XXX

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    A.attribut est un accès à un membre statique nommé attribut.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Mais si this représente l'instance la plus interne, pourquoi this.A désigne-t-il la classe A alors que celle-ci n'est pas relative au this nommé dans une méthode de la classe B ?

    leternel : Oui, tu as raison. Mais qu'en est-il de this.instance utilisé en dehors de la classe A, par exemple dans le main ?

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    je ne pense pas que "this.instance" puisse être compilé dans un main, vu que main, étant "static", n'a pas de this
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Tu as raison leternel, je ne sais pas ce qui a bien pu me passer par la tête en écrivant ceci.

    Citation Envoyé par tchize_ Voir le message
    this représente l'instance courante de la classe la plus interne dans laquelle se trouve la ligne de code.

    A.this représente l'instance courante de la class A (permet de référencer A depuis une inner class)

    Quand à this.A, A étant une classe, c'est une erreur de compilation. Seules les méthodes et les attributs sont accessibles via un this.XXX
    Certes, alors prenons this.A.champquelconque, ou bien <this.A> utilisé dans un quelconque contexte, le but étant de savoir à quelle classe l'expression se rapporte.

  12. #12
    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
    Citation Envoyé par collect Voir le message
    pourquoi this.A désigne-t-il la classe A alors que celle-ci n'est pas relative au this nommé
    this.A est une erreur de compilation, ca ne désigne rien, comme dit dans mon message précédent!

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Pardon, je pensais que tu disais que c'était une erreur de compilation à cause du fait qu'une instruction ne peut avoir pour résultat une classe car cela n'a aucun sens. Donc le this.A.champ que l'on m'a proposé ne fonctionne jamais ?

  14. #14
    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
    tu peux faire this.unNomDeChamp ou this.unNomDeMethode (pour autant que this existe dans ton contexte), mais tu ne peux pas faire this.unNomDeClasse

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Merci à tous pour vos réponses !

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

Discussions similaires

  1. Accéder aux méthodes d'une classe
    Par doubiste_59 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 28/07/2010, 17h09
  2. Réponses: 7
    Dernier message: 29/12/2007, 00h08
  3. Réponses: 5
    Dernier message: 23/04/2007, 17h31
  4. Problème d'accès aux méthodes d'une classe
    Par RR instinct dans le forum Langage
    Réponses: 5
    Dernier message: 26/06/2006, 15h51
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 15h02

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