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 :

Explicitation du formalisme


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Par défaut Explicitation du formalisme
    Bonsoir,

    J'aurais aimé avoir quelques explications sur le code suivant présent dans la FAQ Java :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public MaClasse extends ClasseMere {
       private String attribut;
       /** On peut acceder aux constructeurs de la super-classe*/
       public MaClasse(String uneValeur){
          super(uneValeur);
          //on appelle ici le constructeur de la classe mère
       }
       /** On peut aussi accéder aux constructeurs de la classe elle-même*/
       public MaClasse(String uneValeur){
          this("une valeur par défaut");
          //on appelle ici le constructeur définis un peu plus haut
       }
       /** En général l'appel à this est superflu lors d'appels à une méthode*/
       public void uneMethode(){}
       public void doubleAppel(){
          //les deux lignes suivantes sont équivalentes
          this.uneMethode();
          uneMethode();
       }
       /** L'appel à this peut être utile pour bien différencier
          * les variables de classe des variables de méthodes
          */
       public void uneMethode(String attribut){
          this.attribut = attribut;
          //ici, la variable de classe prend la valeur de la variable
          //passée en paramètre de la méthode
       }
       /** On peut aussi faire appel aux méthodes de la super-classe*/
       public void uneAutreMethode(){
          //on peux faire quelque chose en plus avant
          super.uneAutreMethode();
          //mais aussi après
       }
    }
    - Lignes 4 et 5 :
    D'ou sort le constructeur UneValeur, il a dû être définit précèdement non ?

    - Lignes 4 et 9 :
    Ce sont bien des méthodes que l'ont définies ici ?

    - Lignes 8 :
    Quels sont ces constructeurs justement ? D'ou viennent-ils ?

    - Ligne 10 et 11 :
    Que pourrait-on mettre entre les parenthèses ?
    On appelle le constructeur de la classe mère ?

    - Lignes 14-18 :
    Ce que ces lignes font m'échappe complètement :/

    Je suis un novice mais j'ai vraiment à coeur de comprendre et de progresser.

    Plus qu'une "simple" réponse aux tirets ci-dessus, ce que je recherche c'est ce que ce dit un programmeur lorsqu'il lit ces lignes. Les images qui se crées dans son esprit, la représentation qu'il s'en fait, le schéma logique qu'il en tire.

    J'aimerais arriver à comprendre la nature profonde des concepts derrière ces "simples" lignes. Ne me renvoyé pas vers la FAQ ou un livre, je souhaite justement bénéficier de la plus-value d'un professionnel en "live".

    Vous remerciant,
    AlpA.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    tout d'abord, il y a une erreur dans la classe (je ne sais pas si c'est comme ça dans ta faq ou pas, si c'est le cas, il faudrait le signaler) : la classe a deux constructeurs avec la même signature, ce qui est impossible. Le second constructeur ne devrait pas avoir d'argument au vu de son code.

    - Lignes 4 et 5 :
    D'ou sort le constructeur UneValeur, il a dû être définit précèdement non ?

    Tu veux parler de l'appel super(uneValeur) je suppose : le super(..) indique qu'on appelle un constructeur de la classe parente, celle dont hérite cette classe, donc la classe ClasseMere, qui doit avoir un constructeur avec un argument String.

    Le second constructeur, ligne 9-12 (s'il était correctement écrit), fait appel au premier par l'emploi de this(...),

    - Lignes 4 et 9 :
    Ce sont bien des méthodes que l'ont définies ici ?
    Non ce sont les constructeurs de la classe MaClasse

    - Lignes 8 :
    Quels sont ces constructeurs justement ? D'ou viennent-ils ?

    Donc question caduque

    - Ligne 10 et 11 :
    Que pourrait-on mettre entre les parenthèses ?
    On appelle le constructeur de la classe mère ?

    ligne 11 : c'est un commentaire...
    ligne 10 : donc, comme je le disais, il s'agit de l'appel d'un constructeur de la classe elle-même, ayant un seul argument de type String

    dont voici le code correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public MaClasse(){
          this("une valeur par défaut");
          //on appelle ici le constructeur définis un peu plus haut
       }
    Donc quand on va faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse machin=new MaClasse();
    C'est comme si on faisait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse machin=new MaClasse("une valeur par défaut");
    Pour la question, Que pourrait-on mettre entre les parenthèses ?

    on appelle donc le constructeur MaClasse(String) qui attend un seul argument de type String : donc entre parenthèse, il faut absolument passer une référence de String comme par exemple une constante :

    On pourrait écrire un constructeur avec un argument int:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public MaClasse(int unnombre){
          this(String.valueOf(unnombre));
       }
    etc.

    - Lignes 14-18 :
    Ce que ces lignes font m'échappe complètement :/

    Ligne 14 : on définit une méthode appelée uneMethode, n'ayant aucun argument, ni de type de retour, et qui ne fait rien (y'a pas de code dans son corps, entre les { et })

    Ligne 15-18 : on définit une autre méthode appelée doubleAppel(), sans argument ni type de retour, et dont le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     this.uneMethode();
          uneMethode();
    consiste à appeler deux fois de suite la méthode uneMethode()

    le this. est implicite sur le second appel et explicite sur le premier, mais ça ne change rien dans l'exécution.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut Explication de formalisme
    ligne 4-5oui il a été défini précédemment dans la classe mère. puisque le constructeur de Maclasse a besoin d'un paramètre a la construction donc se paramètre est initialise a partie de sa classe mère.

    de ligne 5 a la dernière il n’y que des méthodes
    ligne 8 c'est le constructeur de Maclass
    ligne 10 et 11 entre ces parenthèses tu peu mettre l'action que ta méthode doit réaliser
    ligne 14-18 ces lignes sont des méthode qui peuvent te permettre de encore réaliser d'autres actions

    j’espère que je me suis fait comprendre dans le cas contraire dit le

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Salut,
    avant de commencer, comme l'a soulevé Joel, une classe ne peut pas avoir deux méthodes ayant une même signature. Il faut tout d'abord corriger cela.

    Citation Envoyé par AlpA. Voir le message
    - Lignes 4 et 5 :
    D'ou sort le constructeur UneValeur, il a dû être définit précèdement non ?
    uneValeur n'est pas un constructeur mais plutôt un paramètre que l'on passe au constructeur de la classe mère en faisant appel au mot clé super... dans la ligne 5
    De ligne 4 à 7, définition du constructeur de la classe courante (MaClasse), dans laquelle on fait appel dans la ligne 5 au constructeur de la super classe ClasseMere.

    - Lignes 4 et 9 :
    Ce sont bien des méthodes que l'ont définies ici ?
    C'est tout à fait ça. Mais du point de vue logique, ce n'est pas correct car les deux méthodes possèdent la même signature.

    - Lignes 8 :
    Quels sont ces constructeurs justement ? D'ou viennent-ils ?
    Dans la méthode qui vient juste après cette ligne de commentaire, on appelle un des constructeurs définis plus haut (s'il y en a beaucoup) dans la même classe "MaClasse" par . Tu seras d'accord avec moi que c'est le constructeur nécessitant qu'un seul paramètre de type String qui sera évoqué.

    - Ligne 10 et 11 :
    Que pourrait-on mettre entre les parenthèses ?
    On appelle le constructeur de la classe mère ?
    A mon avis, la ligne de commentaire devrait précéder l'instruction qui vient juste après. Cela ne t'emberlificoterait guère. Entre les parenthèses, on passe juste une chaîne de caratères tel qu'il est fait dans le code. Ne pas oublier que l'une de deux méthodes (ici constructeurs) devrait disparaître (signature exige!!!!)


    - Lignes 14-18 :
    Ce que ces lignes font m'échappe complètement :/
    ligne 14, tel que Joel l'a explicitée
    lignes 15-19: on définit une autre méthode dans laquelle on appelle à deux reprises la méthode uneMethode() définies au sein de la classe MaClasse.

    Ouf! c'était vraiment long!!!!
    Si la réponse t'as vraiment aidé, juste un petit click sur ne derangerait personne
    Sans oublier de marquer la discussion "Résolue" si tu es satisfait après toutes les réponses proposées
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hé ho -_-°. Lignes 4 et 9 ce ne sont pas des méthodes, ce sont des constructeurs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hé ho -_-°. Lignes 4 et 9 ce ne sont pas des méthodes, ce sont des constructeurs.
    ... un constructeur n'est pas d'abord une méthode avant d'être spécial??? juste un petit oubli de précision de ma part mais cela ne valait pas un vote négatif
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par MasterMbg Voir le message
    ... un constructeur n'est pas d'abord une méthode avant d'être spécial??? juste un petit oubli de précision de ma part mais cela ne valait pas un vote négatif
    Un constructeur est un type très très spécifique de méthode, tellement spécifique, que :

    - ils ne s'appellent pas au même moment du cycle de vie de l'instance
    - ils ne s'appellent pas de la même façon
    - il n'y a pas les mêmes conditions d'implémentation (par exemple, pas de code avant l'appel du super constructeur appelé, ou pas d'appel de 2 constructeurs)
    - le constructeur n'a jamais de type de retour

    Le constructeur est tellement spécifique que les classes d'introspection de java fournissent des méthodes différentes pour obtenir les constructeurs et les autres méthodes.

    Évitons d'embrouiller un débutant en considérant qu'un constructeur c'est juste un cas particulier de méthode, car c'est tellement un cas particulier, que c'est carrément pas la même chose au final
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par MasterMbg Voir le message
    ... un constructeur n'est pas d'abord une méthode avant d'être spécial???
    Juste non. Ce sont deux choses qui se ressemblent en apparence, et qui sont complètement différentes par nature.
    De toute façon la question était "c'est bien des méthodes, n'est-ce pas, pas autre chose, comme par exemple des constructeurs ?"

    Citation Envoyé par MasterMbg Voir le message
    juste un petit oubli de précision de ma part mais cela ne valait pas un vote négatif
    Soit, ta plaidoirie me convient. Et moi, qu'est-ce qui justifie que mon message ne te plaise pas ? J'attends.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Juste non. Ce sont deux choses qui se ressemblent en apparence, et qui sont complètement différentes par nature.
    De toute façon la question était "c'est bien des méthodes, n'est-ce pas, pas autre chose, comme par exemple des constructeurs ?"



    Soit, ta plaidoirie me convient. Et moi, qu'est-ce qui justifie que mon message ne te plaise pas ? J'attends.
    Merci beaucoup, mais je n'ai pas dit que votre méthode ne me plaisait pas du tout... Par contre j'ai avoué avoir oublié une petite précision pour les différencier de près...
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses et le temps que vous y avez consacré.

    Citation Envoyé par joel.drigo Voir le message
    Non ce sont les constructeurs de la classe MaClasse
    On diférencie une méthode d'un constructeur par le fait que ce dernier porte le même nom que la classe ? (un constructeur n'est-il pas une méthode particulière ?)

    EDIT : ok j'ai vu les derniers messages^^

    Citation Envoyé par joel.drigo Voir le message
    la classe ClasseMere, qui doit avoir un constructeur avec un argument String.
    Comment pourrait s'écrire ce constructeur justement ?

    Lignes 4-5 : Donc on crée un constructeur pour MaClasse à partir de celui de ClasseMere. Ok. Les deux étant de type String ce qui est cohérent.
    Citation Envoyé par MasterMbg Voir le message
    uneValeur n'est pas un constructeur mais plutôt un paramètre que l'on passe au constructeur de la classe mère en faisant appel au mot clé super... dans la ligne 5
    Mais comment s'appelle le constructeur de la classe fille ? C'est MaClasse ou uneValeur ?

    Citation Envoyé par joel.drigo Voir le message
    Donc quand on va faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse machin=new MaClasse();
    Ici on crée un nouveau constructeur à partir de celui de la classe fille ?

    Citation Envoyé par joel.drigo Voir le message
    on appelle donc le constructeur MaClasse(String) qui attend un seul argument de type String : donc entre parenthèse, il faut absolument passer une référence de String comme par exemple une constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public MaClasse(){
          this("une valeur par défaut");
       }
    Mais alors avec les lignes 9-10, on crée un second constructeur ou on ne fait qu'en appeler un déjà crée ?

    Citation Envoyé par joel.drigo Voir le message
    et dont le code consiste à appeler deux fois de suite la méthode uneMethode()
    Mais à quoi cela sert-il concrètement de faire ça ? Ou c'est juste pour l'exemple^^

    Dans l'attente de vous lire,
    Bien à vous.

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par AlpA. Voir le message
    Bonjour,

    Merci beaucoup pour vos réponses et le temps que vous y avez consacré.
    Citation Envoyé par AlpA. Voir le message
    On diférencie une méthode d'un constructeur par le fait que ce dernier porte le même nom que la classe ?
    On reconnait un constructeur au fait qu'il ait le même nom et qu'il n'ait pas de type de retour.

    Dans le code suivant, on a créé une méthode qui a le même nom que le constructeur : bon, c'est pour l'exemple, on le fait jamais, car ça peut être "confusant". D'ailleurs les IDE signalent un warning sur ç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
    15
    16
    17
    18
    19
    20
    21
    public class CTest {
     
            // constructeur
    	public CTest() { 
     
    	}
     
            // méthode
    	public CTest CTest() {
    		return new CTest();
     
    	}
     
    	public static void main(String[] args) {
     
    		CTest test1 = new CTest();
    		CTest test2 = test1.CTest();
     
    	}
     
    }
    Citation Envoyé par AlpA. Voir le message
    Comment pourrait s'écrire ce constructeur justement ?
    Ce constructeur de la classe ClasseMere s'écrit de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public ClasseMere(String argument) {
        // du code ici, qui dépend de ce qu'on veut faire avec cette classe, 
        // à priori, on va utiliser l'argument pour initialiser l'instance
    }

    Citation Envoyé par AlpA. Voir le message
    Mais comment s'appelle le constructeur de la classe fille ? C'est MaClasse ou uneValeur ?
    MaClasse !
    UneValeur c'est le nom de l'argument passé au constructeur, et qui va être passé au super constructeur (au constructeur de la classe mère)


    Citation Envoyé par AlpA. Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse machin=new MaClasse();
    Ici on créer un nouveau constructeur à partir de celui de la classe fille ?
    Non, ça c'est un exemple de code d'instanciation : on crée une instance d'objet ayant le type MaClasse, on utilisant le constructeur sans argument (sans paramètre si tu prefères) et on stocke sa référence (son adresse en mémoire en quelque sorte) dans la variable machin. En plus on indique au compilateur que le type de l'objet pointé est MaClasse (le premier MaClasse)

    Citation Envoyé par AlpA. Voir le message
    Mais alors avec les lignes 9-10, on crée un second constructeur ou on ne fait qu'en appeler un déjà crée ?
    On créé un second constructeur qui appelle le premier : ce nouveau constructeur n'a pas d'argument et appelle le premier, qui en a un, en lui passant justement comme valeur pour cette argument une valeur constante.

    EDIT : oups j'étais décalé en effet sur la question (faut dire que c'est facile de suivre quand on à plein de question et des références à des numéros de lignes d'un code d'un autre post @thelvin aura répondu à la bonne question dans le post suivant...

    Citation Envoyé par AlpA. Voir le message
    Mais à quoi cela sert-il concrètement de faire ça ? Ou c'est juste pour l'exemple^^
    Le constructeur, tu l'auras compris, sert à initialiser l'objet. Il arrive lorsqu'on créé des classes, qu'on veuille créé une version "préconfiguré" en quelquesorte : si un développeur qui utilise ton code (toi ou un autre) veut utiliser le cas standard (par défaut) que tu proposes, il utilisera le constructeur sans argument, sinon, s'il veut pouvoir mettre la valeur qu'il veut, il utilisera le constructeur avec.

    Par exemple, prenons la classe JFileChooser de java : son constructeur sans argument permet d'ouvrir un dialogue de sélection de fichier sur le dossier courant par défaut, mais elle propose un constructeur ou tu peux passer le dossier de ton choix en paramètre. De même, pour les cas très particulier, tu as encore un paramètre supplémentaire qui te permet d'utiliser ton propre FileSystemView si celui fournit par java ne te suffit pas (alors qu'en général on se contente de celui par défaut qui convient pour la plupart de usages standard)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par AlpA. Voir le message
    Mais comment s'appelle le constructeur de la classe fille ? C'est MaClasse ou uneValeur ?
    Un constructeur n'a pas de nom.

    Deux constructeurs d'une même classe, se différencient par les paramètres qu'ils prennent. (Et du coup la classe que tu nous montres n'est pas valide : elle possède deux constructeurs qu'on ne peut pas distinguer l'un de l'autre, puisqu'ils prennent les mêmes paramètres.)

    Citation Envoyé par AlpA. Voir le message
    Mais à quoi cela sert-il concrètement de faire ça ? Ou c'est juste pour l'exemple^^
    C'est juste pour l'exemple. Il fait la différence entre appeler une méthode avec this. ou sans this. ,
    Plus exactement, il montre qu'il n'y a pas de différence.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Par défaut
    Re-bonsoir,

    Citation Envoyé par joel.drigo Voir le message
    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
    19
    20
    21
    22
    23
    public class CTest {
                 // On crée un constructeur pour la classe CTest donc il porte le même nom. 
                 // Il n'a pas d'argument donc concrètement cela sert-il à 
                 // quelque chose de faire un constructeur comme cela ?
            	public CTest() { 
    	}
                 // C'est une méthode puisqu'elle retourne quelque chose.
                 // Mais j'ai du mal à comprendre la syntaxe : cette méthode s'appelle CTest 
                 // et elle est du "type" du constructeur (qui porte le même nom^^), c'est ça ? 
            	public CTest CTest() {
    		return new CTest();
    	}
    	public static void main(String[] args) {
                              // On crée un objet de quel type ? 
                              // Le CTest correspond à la méthode ou au constructeur ?
    		CTest test1 = new CTest();
                              // On crée un second objet du même type que le premier et le "test1.CTest()" 
                              // signifie qu'on lui assigne la valeur obtenu après application 
                              // de la méthode CTest() 
                              // au premier objet ?
    		CTest test2 = test1.CTest();
    	}
    }
    Citation Envoyé par joel.drigo Voir le message
    Mais comment s'appelle le constructeur de la classe fille ? C'est MaClasse ou uneValeur ?
    MaClasse !
    Et
    Citation Envoyé par thelvin Voir le message
    Un constructeur n'a pas de nom.
    Simple question de "point de vue" ou est-ce plus que ça ?

    Citation Envoyé par joel.drigo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse machin=new MaClasse();
    Ici on créer un nouveau constructeur à partir de celui de la classe fille ?

    Non, ça c'est un exemple de code d'instanciation : on crée une instance d'objet ayant le type MaClasse, on utilisant le constructeur sans argument (sans paramètre si tu prefères) et on stocke sa référence (son adresse en mémoire en quelque sorte) dans la variable machin. En plus on indique au compilateur que le type de l'objet pointé est MaClasse (le premier MaClasse)
    Ok, en somme on crée un objet de type MaClasse (le premier) qui correspond au constructeur et on stocke dans l'espace mémoire aloué à ce nouvel objet le constructeur sans argument ? (je crois que ce que je dis n'a pas de sens...)

    Citation Envoyé par thelvin Voir le message
    C'est juste pour l'exemple. Il fait la différence entre appeler une méthode avec this. ou sans this. ,
    Plus exactement, il montre qu'il n'y a pas de différence.
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void doubleAppel(){
          //les deux lignes suivantes sont équivalentes
          this.uneMethode();
          uneMethode();
       }
    En fait le "this" renvoie ici à la méthode doubleAppel. Avec "this" on lui dit d'appeler uneMethode ?

    Vous remerciant,
    AlpA.

Discussions similaires

  1. [PL/SQL) Curseur et nom de champ explicite
    Par Loko dans le forum Oracle
    Réponses: 6
    Dernier message: 01/12/2004, 15h07
  2. nommage explicite des champs
    Par didier.cabale dans le forum InterBase
    Réponses: 3
    Dernier message: 23/08/2004, 18h27
  3. Comment écrire explicitement en sortie d'un job OEM ?
    Par zestrellita dans le forum Entreprise Manager
    Réponses: 11
    Dernier message: 11/03/2004, 09h36
  4. Utilisation de Option explicit
    Par Perihan dans le forum ASP
    Réponses: 5
    Dernier message: 29/10/2003, 11h43
  5. - Insertion : valeur explicite
    Par Leoxp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/05/2003, 17h21

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