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

Langage Java Discussion :

instancier un objet fils, d'après objet père


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut instancier un objet fils, d'après objet père
    Bonjour,

    j'ai 2 méthodes.

    une méthode main qui appelle ma 2ème méthode "codeRepet".

    ma méthode main doit effectuer un traitement, peu importe la classe "fille" fournit en paramètre à la méthode "codeRepet", car c'est le même traitement, seul l'instanciation de l'objet change.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    main{
     
    MaClasseFille mgr = new MaClasseFille();				
    codeRepet(mgr);
     
    Ma2emeClasseFille mgr2 = new Ma2emeClasseFille();
    codeRepet(mgr2)
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static codeRepet (Object repriseMgr)
    {
            repriseMgr obj = new repriseMgr();
    obj.methodeUniqueAMaClasse;
     
     
    }
    le problème, c'est que je ne sais pas comment, une fois dans ma méthode codeRepet, comment instancier un objet de ma classe MaClasseFille, alors que j'ai fourni en paramètre de méthode le type "Object". Bien entendu, je ne peux pas savoir à l'avance quel type de classe sera retournée, c'est donc pour ça que je le mets en Object. Ensuite, une erreur est affichée lorsque j'essaie d'appeler une méthode propre à la classe MaClasseFille...

    Est-ce que qqn aurait une idée comment effectuer une instanciation d'objet de ma classe MaClasseFille ???

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Je pas sur de bien comprendre mais tu veux faire reference a l'objet actuel?

    Ensuite tu parles de methodes mais de quelle classes?

    Tu as 2 classes filles mais quelle est la classe mere ?

    codeRepet est une methode de quelle classe ?

  3. #3
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Salut,

    J'ai pas compris ce que tu cherches à faire, mais ce qui est sûr c'est que ton cours sur l'OO est à revoir

    @+ et sans rancune


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Est-ce normal que ta méthode codeRepet n'ait pas de type de retour ? Moi je ne crois pas... De plus, c'est quoi le type repriseMgr ? Est-ce que tu crois qu'en passant un objet d'un certain type en paramètre d'une méthode tu peux l'utiliser comme un type et pas comme un objet ? TRu t'es emmêlé les pinceaux. Mais je crois avoir saisi ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    static void codeRepet(Object repriseMgr){
        Object obj = repriseMgr.getClass().newInstance();
    }
    "Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    j'ai 2 classes filles, 1 classe mère, et 1 classe que j'appellerai pour ici "Principal" avec mes 2 méthodes.

    codeRepet est donc dans la classe Principal.

    dans ma classe principale, méthode main :

    j'instancie 1 objet d'une classe fille, que je passe en paramètre à la méthode "codeRepet"

    codeRepet(objClasseFille)



    dans codeRepet(ClasseMere objRecupere)

    j'aimerais pouvoir "voir" les méthodes propres de ma classe fille mais je ne peux pas puisque mon objet de type "ClasseMere".

    Désolé pour l'explication, mais c'est assez complexe a expliquer pour moi.

    Merci

  6. #6
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Voir un peu plus haut. Avec la méthode getClass paropre à tous les objets tu peux récupérer la classe de ton instance. Pour voir les méthodes, il existe getClass().getMethods()...
    "Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Bindy
    j'aimerais pouvoir "voir" les méthodes propres de ma classe fille mais je ne peux pas puisque mon objet de type "ClasseMere".
    Effectivement tu ne peux pas ;-)
    mais tu peux écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void codeRepet(ClassMere objRecupere) {
        if (objRecupere instanceof ClassFille1) {
             ((ClassFille1) objRecupere).methodeSpecifiqueClassFille1();
        }
        if (objRecupere instanceof ClassFille2) {
             ((ClassFille2) objRecupere).methodeSpecifiqueClassFille2();
        }
    }
    EDIT : Mais si c'est la même méthode à appeler dans les 2 cas... autant mettre cette méthode dans la class ClassMere et alors, il n'y a pas de pb.

  8. #8
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Bindy
    j'aimerais pouvoir "voir" les méthodes propres de ma classe fille mais je ne peux pas puisque mon objet de type "ClasseMere".
    Quelle traitement veux tu faire avec ces methodes exactament ?

    Parce que si c'est juste un appel. Tu declares cette methode dans ta classe mere (eventuellement en abstract), et ensuite quand tu derives tes classes filles tu definis ces methodes.
    Au lieu de passer un Object tu passe un ClasseMere comme parametre de codeRepet.

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par willoi
    Quelle traitement veux tu faire avec ces methodes exactament ?

    Parce que si c'est juste un appel. Tu declares cette methode dans ta classe mere (eventuellement en abstract).


    oui c'est juste un appel d'accesseur, qui est du même nom pour toutes les sous-classes (getNom)

  10. #10
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Bindy
    oui c'est juste un appel d'accesseur, qui est du même nom pour toutes les sous-classes (getNom)
    Donc fais comme je dis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ClasseMere{
    public String getNom(){
    //ton traitement
    }
    }
    Pour tes classes filles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ClasseFille1 extends ClasseMere{
    public String getNom(){
    //ton traitement
    }
    }
    et pour l'appel dans ta methode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void codeRepet (ClasseMere tonObjet){
    System.out.println(tonObjet.getNom());
    }

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

Discussions similaires

  1. Instancier une classe sans nommer l'objet
    Par jamiria dans le forum VB.NET
    Réponses: 0
    Dernier message: 29/10/2010, 14h17
  2. Réponses: 5
    Dernier message: 08/02/2008, 16h07
  3. [OJB] probleme d'insertion de l'id de l'objet fils en base
    Par rherrad dans le forum Persistance des données
    Réponses: 3
    Dernier message: 19/07/2007, 15h48
  4. Réponses: 13
    Dernier message: 22/06/2007, 19h49
  5. Réponses: 7
    Dernier message: 22/03/2007, 14h26

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