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 :

un cas avec des Sous Classes


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 80
    Points : 47
    Points
    47
    Par défaut un cas avec des Sous Classes
    Bonjour a tous,
    J'aimerai avoir un avis sur un cas general. Voici mon probleme.

    J'ai une classe C avec une fonction void toto()
    j'ai une classe CA extends C ainsi qu un classe CB extends C puis une classe CC extends C ainsi de suite.

    Je sais que j'ai une fonction differente MaFonction pour chaque Cx
    mais de meme structure Public int MaFonction(int x)

    Comment faire pour appeler a partir de ma fonction toto dans ma classe C la bonne 'MaFonction' correspondant a un objet que je sais etre de type Cx ?


    J'espere que cela est assez clair ainsi. Je ne voulais pas mettre 500 lignes de code. Merci de vous occuper de mon (lourd) cas

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Salut,

    Tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class C {
     
        public void toto() {
            maFonction();
        }
     
        public abstract int maFonction(int x);
     
    }

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    ecrit une methode public int MaFonction(int x) pour ta classe C (soit en methode abstraite mais dans ce cas ta classe C devras être abstraite, soit tu laisse la methode vide).
    Tes classes Cx réécrivent la methode public int MaFonction(int x), lors d'un appel à cette methode sur un objet de classe C, si cet objet est une instance de la classe CA, alors c'est la methode réécrite qui est appelée.

  4. #4
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Dites-moi si je me trompe mais le polymorphisme te permet de faire ç tout simplement :
    exemple : tu as une liste de classes C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<C> list=new ArrayList<C>();
    tu peux appliquer la méthode générique maFonction sur chaque element de la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Iterator it=list.iterator();
    while(it.hasNext()){
       ((C)it.next()).maFonction();
    }
    ainsi tu appeleras pour chaque element de type Cx la méthode "maFonction" propre à la classe Cx.

    Rmq, c'est ce qui se passe lorsque tu appelles un toString() sur un objet que tu as crée : ton objet étend la classe Objet ( qui elle aussi possède la méthode toString() ) mais c'est SA méthode qui est appelée.

    En espérant avoir été clair...

    EDIT : encore grilled :-(

  5. #5
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Bah, en Java le polymorphisme (vu qu'a priori c'est de ça dont tu parle) est le comportement par défaut donc y'a pas de souci ça se fait tout seul.

    Tu code ta méthode public int maFonction(int x) comme tu veux dans chacune de tes sous-classe et selon le type réel de l'objet, la méthode de la bonne sous-classe sera appelée.

    Exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    C c=new Ca();
    c.maFonction();//appel de maFonction située dans Ca
    c=new Cb();
    c.maFonction();//appel de maFonction située dans Cb
    c=new Cc();
    c.maFonction();//appel de maFonction située dans Cc
    c=new C();
    c.maFonction();//appel de maFonction située dans C

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par natha
    Salut,

    Tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class C {
     
        public void toto() {
            maFonction();
        }
     
        public abstract int maFonction(int x);
     
    }
    Attention, dans ce cas la classe C doit elle aussi être abstraite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    abstract public class C {
     
        public void toto() {
            maFonction();
        }
     
        public abstract int maFonction(int x);
     
    }
    sinon tu peut faire aussi comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class C {
     
        public void toto() {
            maFonction();
        }
     
        public int maFonction(int x) {
              // comportement par défaut, eventuellement rien du tout;
        }
     
    }

  7. #7
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 80
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup a tous !

    c'est bien du polymorphisme alors, je debute j en etais pas trop sur.

    et merci Natha j'ai compris desormais l'interet des classes abstraites.
    Elle ne servent uniquement que de squelette minimum pour ses sous-classes.

    Merci encore !

  8. #8
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par Daeron
    et merci Natha j'ai compris desormais l'interet des classes abstraites.
    De rien.

    Citation Envoyé par Daeron
    Elle ne servent uniquement que de squelette minimum pour ses sous-classes.
    C'est plus vaste que ça Disons qu'en général elles représentent le dénominateur commun entre plusieurs objets.

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

Discussions similaires

  1. [Cookies] Visibilité avec des sous-domaines
    Par kevinf dans le forum Langage
    Réponses: 6
    Dernier message: 06/02/2007, 15h31
  2. Partage de fichier windows avec des sous réseaux différents
    Par Annaced dans le forum Administration
    Réponses: 4
    Dernier message: 07/06/2006, 21h40
  3. Réponses: 5
    Dernier message: 25/04/2006, 16h04
  4. Réponses: 2
    Dernier message: 28/09/2005, 17h08
  5. fichier .bat : problèmes avec des sous-répertoires
    Par aymron dans le forum Windows
    Réponses: 4
    Dernier message: 23/06/2005, 09h33

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