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 :

Heritage multiple en Java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut Heritage multiple en Java
    L'heritage multiple en Java n'est pas permis.
    Une classe ne peut hériter de plus d'une classe.
    Mais supposons qu'on ait le diagramme de classes suivant :

    Z
    /\
    X Y
    \/
    A

    Les classes X et Y héritent de la classe Z, et la classe A hérite des classes X et Y.

    Quelles solutions / contournements sont possibles pour implémenter cet héritage multiple en Java ?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par longbeach Voir le message
    Quelles solutions / contournements sont possibles pour implémenter cet héritage multiple en Java ?
    Aucun : c'est justement pour éviter ce genre de cas que l'héritage multiple est interdit...

    a++

  3. #3
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Tu peux déclarer X et Y comme étant des interfaces qu'implémente A, mais j'imagine que ça suppose qu' X et Y n'aient aucun code dans les méthodes implémentées...

    EDIT : non, chui naze, pour que ça marche il faudrait que Z soit elle-aussi une interface...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Pour faire de l'héritage multiple, aucune solution.

    Par contre, dans le monde java, il est possible de faire "comme si" avec la composition et l'héritage mélangés :

    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
    public interface Z {
      void z ();
    }
     
    public interface X extends Z {
      void x ();
    }
     
    public interface Y extends Z {
      void y ();
    }
     
    public class ClasseZ implements Z {
      public void z () { ... }
    }
     
    public class ClasseX extends ClasseZ implements X {
      public void x () { ... }
    }
     
    public class ClasseY extends ClasseZ implements Y {
      public void y () { ... }
    }
     
    public class ClasseA extends ClasseX implements Y {
      private Y yImpl;
      public ClasseA () { yImpl = new ClasseY(); }
      public void y () { yImpl.y(); }
    }
    C'est très lourd, ce n'est pas pareil que de l'héritage multiple, mais c'est ce qui s'en rapproche le plus en java.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 7
    Par défaut
    De toute manière, il vaut mieux préférer une composition à un héritage dès que c'est possible (et cohérent avec le contexte).

  6. #6
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    et que pensez-vous de cette approche ?

    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
     
    interface Z {
          void met();
    }
     
    class X implements Z {
       public  void met() { }
    }
     
    class Y implements Z {
       public  void met() { }
    }
     
     
    class A {
    Z z;
    X x = new X(); 
    Y y = new Y(); 
    z = x;
    z.met(); 
    z = y;
    z.met();
    }

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dingoth Voir le message
    C'est très lourd, ce n'est pas pareil que de l'héritage multiple, mais c'est ce qui s'en rapproche le plus en java.
    La question est plutôt : pourquoi faire de l'héritage multiple ???

    Il vaut mieux revoir la conception que de s'aventurer dans une architecture un peu tordu...

    Citation Envoyé par longbeach Voir le message
    et que pensez-vous de cette approche ?
    C'est à dire ? Que veux-tu mettre en évidence ?


    a++

Discussions similaires

  1. heritage multiple
    Par r0d dans le forum C++
    Réponses: 6
    Dernier message: 21/04/2006, 09h40
  2. [POO] Héritage multiple Parent
    Par djshaker dans le forum Langage
    Réponses: 15
    Dernier message: 15/03/2006, 17h35
  3. [heritage][conception]héritage multiple en java!
    Par soulhouf dans le forum Langage
    Réponses: 9
    Dernier message: 25/08/2005, 20h03
  4. Réponses: 9
    Dernier message: 25/05/2005, 18h17
  5. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30

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