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 :

Problème de déclaration "constructeur"


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 61
    Par défaut Problème de déclaration "constructeur"
    Bonjour,

    Je suis débutant en Java, j'essaie de faire communiquer deux classes entre elles. Mon problème est que je n'arrive pas à créer un nouvel objet avec un constructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class ApprenantsPoecPhp extends Eleve {
    	public static void main(String[] args) {
    		Eleve lea = new Eleve("Léa");
     
    		System.out.println(lea);
     
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Eleve {
    	private String name;
     
    	public Eleve(String name) {
    		super();
    		this.name = name;
    	}
    }
    j'aimerai créer un objet Eleve dans ma classe ApprenantsPoecPhp avec un conctructeur.

    Si vous avez besoin de plus d'info, n'hésitez pas.

  2. #2
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut

    Citation Envoyé par Jessyv96 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Eleve {
        private String name;
     
        public Eleve(String name) {
            super();
            this.name = name;
        }
    }
    Si tu veux en savoir plus, voilà un bon cours

    Edit :

    Le problème se trouve dans ton constructeur. Tu appelle la méthode super(). Cette méthode est un appel vers le constructeur de la super-classe de ta classe Eleve. Le problème c'est que ta classe Eleve n'a pas de super-classe (tu n'as pas class Eleve extends SuperClasse). Il faut donc enlever l'appel à cette méthode dans ton constructeur.

    Comme souligné par Joël, c'est faux. Je me suis totalement planté mea culpa

  3. #3
    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,

    Citation Envoyé par Drowan Voir le message
    Le problème se trouve dans ton constructeur. Tu appelle la méthode super(). Cette méthode est un appel vers le constructeur de la super-classe de ta classe Eleve. Le problème c'est que ta classe Eleve n'a pas de super-classe (tu n'as pas class Eleve extends SuperClasse). Il faut donc enlever l'appel à cette méthode dans ton constructeur.
    Pas du tout.

    1. Toute classe en Java étend la classe Object, directement ou indirectement. Si une classe n'a pas de "extends gnagna", alors elle étend Object. Tout constructeur peut avoir (en première ligne uniquement) un appel de super(), si la classe étend une classe qui a un constructeur sans argument, ce qui est le cas de la classe Object.
    2. Le problème se situe dans la classe ApprenantsPoecPhp, qui, elle, étend Eleve, qui elle a un constructeur avec argument. Une classe a implicitement (c'est-à-dire qu'il n'est pas explicitement écrit) un constructeur sans argument, sauf si elle a au moins un constructeur avec (au moins un argument) : dans ce cas, il lui faut un constructeur sans argument explicite pour si on veut pouvoir appeler super() dans une classe qui l'étend. La classe ApprenantsPoecPhp devrait avoir un constructeur qui invoque le seul constructeur de la classe Eleve.
    3. En réalité, la solution, c'est que la classe ApprenantsPoecPhp ne devrait à priori pas étendre la classe Eleve. A moins que ApprenantsPoecPhp représente un éleve spécifique.

      Dans ce cas, on peut faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      public class ApprenantsPoecPhp extends Eleve {
       
          public ApprenantsPoecPhp(String name) {
               super(name);
          }
       
      }
      ou

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      public class ApprenantsPoecPhp extends Eleve {
       
          public ApprenantsPoecPhp() {
               super("un nom par défaut");
          }
       
      }
      ou

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      public class ApprenantsPoecPhp extends Eleve {
       
          public ApprenantsPoecPhp(int machintruc) {
               super(machintruc<0?"truc":"machin");
          }
       
      }
      ou... tout ce qu'on veut comme constructeur adéquat à ce que nécessite ApprenantsPoecPhp
    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.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 61
    Par défaut
    Tout d'abord, merci pour vos réponses, ça m'a bien servi, d'ailleurs je n'ai plus d'erreur, mais j'ai une autre question :

    Pourquoi quand je compile à la console ça me sort : "Eleve@33909752"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class ApprenantsPoecPhp extends Eleve {
        public ApprenantsPoecPhp(String name) {
            super(name);
       }
     
    	public static void main(String[] args) {
    		Eleve jessy = new Eleve("Jessy");
    		System.out.println(jessy);
    	}
    }

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par Jessyv96 Voir le message
    Pourquoi quand je compile à la console ça me sort : "Eleve@33909752"
    Parce que c'est la méthode toString de la classe mère Object qui est utilisé.

    A+.

  6. #6
    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 Jessyv96 Voir le message
    Pourquoi quand je compile à la console ça me sort : "Eleve@33909752"
    Parce que quand tu fais System.out.println( machin ); ou machin est un argument autre qu'un primitif, un String, un char[], c'est donc forcément la version de la méthode où l'argument est de type Object, et dans ce cas, pour le convertir en chaîne pour pouvoir l'afficher, c'est sa méthode toString() qui est appelée. Comme tu n'as pas défini de méthode spécifique toString() ni sur Eleve, ni sur ApprenantsPoecPhp, c'est la méthode de Object qui est appelée et son implémentation génère cette chaîne de caractères (le nom simple de la classe, suivi de @, suivi d'une référence d'objet).

    Pour afficher quelque chose qui a du sens, qui correspond à ce que tu voudrais, il faut donc juste implémenter cette méthode de façon à ce qu'elle génère la chaîne que tu veux voir affichée. Par exemple :

    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 Eleve {
        private String name;
     
        public Eleve(String name) {
            this.name = name;
        }
     
        /**
          * Génère une représentation String de l'élève (soit le nom de l'élève)
           */
        public String toString() {
              return name;
        }
     
    }
    PS: ce n'est pas à la compilation que ça fait ça mais à l'exécution (la compilation c'est le processus qui transforme le code source en bytecode : aucune exécution de ton code n'est faite pendant la compilation).
    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.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/09/2007, 16h57
  2. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 11h47

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