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 :

Héritage Multiple en Java


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut Héritage Multiple en Java
    Bonjour tout le monde,

    J'aimerai savoir comment détourner l’interdiction de l'héritage multiple en Java, sans passer par une interface?
    Voila un exemple ou ana besoin de cette solution, je dois par exemple modéliser ce problème en utilisant uniquement des classes:
    Personne, Enseignant, Salarie, Etudiant, Etudiant-Salarie.
    Ici étudiant-Salarié est à la fois étudiant et salarié, or c'est interdit de faire l'héritage multiple en Java.
    Merci de me présenter quelque moyens pour résoudre ce problème.

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par naou18 Voir le message
    J'aimerai savoir comment détourner l’interdiction de l'héritage multiple en Java, sans passer par une interface?
    Pourquoi sans passer par une interface ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Merci pour ta question.
    En effet c'est simple, mes classes ont des méthodes à implémenter chose que je ne peux faire avec la classe Etudiant et Salarié s'ils était des interfaces.

  4. #4
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Effectivement l'héritage multiple n’existe pas en JAVA.
    Pour moi, si on hésite entre une interface et un héritage on doit se poser la question :
    Est-ce que mon objet "est composé de" ou "est un" ?

    Je m'explique une berline est une voiture, et est composé de roues, la classe berline héritera de voiture et ses méthodes démarrer, arrêter, etc, et implémentera les méthodes des roues (en général rouler, éventuellement crever ).

    Dans ton cas, un étudiant est une personne (il est pas composé de bouts de gens ), par contre un étudiant-salarié est une personne et peut ne plus être salarié...
    Mais il est vrai que c'est subjectif...

    Après je te conseille ce tuto, pour approfondir.
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  5. #5
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Tu dois tout de même utiliser les interfaces en faisant quelquechose comme ceci 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public interface IA {
      void methodA();
    }
     
    public A implements IA {
      void methodA() {  //code  }
    }
     
    public interface IB {
      void methodB();
    }
     
    public abstract B implements IB {
      void methodB() {  //code  }
    }
     
    public C implements IA, IB {
      private IB b = new B();
      private IA a = new A();
     
      public void methodB() {
        b.methodB();
      }
     
      public void methodA() {
        a.methodA();
      }
    }
    Edit : Et je viens de trouver un ancien topic sur la question ici.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    +1 Robin, mais je préfère avoir des interfaces nommées A et B, et des impléméntations nommées par exemple SimpleA et SimpleB.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    @Robin , ce n'est pas du tous ce que je veux faire.
    je pense que l'agrégation est à préfère dans ce genre ce situation, je veux dire EtudiantSalarie. En plus la plupart du temps lorsqu'on fait le design on évite d’utilisé l'héritage même si les Interface résout le problème du diamant , car java ne permet que l'héritage simple.

    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
    35
    36
    37
    38
    39
    40
    41
    42
    public class Personne{
    private String nom ;
    private String prenom ;
    private String sportPratique ;
    public Personne(String nom , String prenom , String sportPratique){
    this.nom = nom ;
    this.prenom = prenom ;
    this.sportPratique = sportPratique ;
    }
    }
    public class Enseignant extends Salarie{
    private String matiereEnseignee ;
    public Enseignant(String nom , String prenom , String sportPratique , int salaire , String matiereEnseignee){
    super(nom , prenom , sportPratique , salaire) ;
    this.matiereEnseignee = matiereEnseignee ;
    }
    }
    public class Salarie extends Personne{
    private int salaire ;
    public Salarie(String nom , String prenom , String sportPratique , int salaire){
    super(nom , prenom , sportPratique) ;
    this.salaire = salaire ;
    }
    }
    public class Etudiant extends Personne{
    private String matiereEnseignee ;
    private int salaire;
    public Enseignant(String nom , String prenom , String sportPratique , int salaire , String matiereEnseignee){
    super(nom , prenom , sportPratique ) ;
    this.salaire=salaire;
    this.matiereEnseignee = matiereEnseignee ;
    	}
    }
    public class EtudiantSalarie{
    private Etudiant e ;
    private Salarie s ;
    public EtudiantSalarie(String nom , String prenom , String sportPratique , int salaire ,
    String anneeEtude){
    e = new Etudiant(anneeEtude , nom , prenom , sportPratique) ;
    s = new Salarie(nom , prenom , sportPratique , salaire) ;
    }
    }

  8. #8
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par naou18 Voir le message
    @Robin , ce n'est pas du tous ce que je veux faire.
    Ah bon pourtant moi j'ai lu dans ta demande : "mes classes ont des méthodes à implémenter chose que je ne peux faire avec la classe Etudiant et Salarié s'ils était des interfaces."

    Citation Envoyé par naou18 Voir le message
    En plus la plupart du temps lorsqu'on fait le design on évite d’utilisé l'héritage même si les Interface résout le problème du diamant , car java ne permet que l'héritage simple.
    Oui et ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  9. #9
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Il n'y a pas moyen de faire ce que je veux avec une interface, le seul moyenne que j'ai trouvé pour faire de l'héritage multiple c'est l’agrégation on créons des instances de chaque classe dans la classe composite.
    à prouver le contraire, si c'est possible?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    Le problème est que sans interface le code produit n'est pas vraiment
    réutilisable, exemple tu as les méthodes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      - plusHautSalaire(List<Salarie> salarieList) {...}
      - meilleurProgrammeurDeLaClasse(List<Etudiant> etudiantList) {...}
    Comment les utiliser si un de tes salariés devient étudiant ou vice versa?

  11. #11
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Il n'y a pas moyen de faire ce que je veux avec une interface, le seul moyenne que j'ai trouvé pour faire de l'héritage multiple c'est l’agrégation on créons des instances de chaque classe dans la classe composite.
    à prouver le contraire, si c'est possible?
    En regardant dans mon exemple, tu remarqueras que j'ai créé dans la classe fille des instances de classes concrètes implémentant les interfaces respectives.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  12. #12
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    @LittleBean: Je n'ai pas bien compris ce que tu veux dire, par cette exemple, ni, pourquoi tu utilise les generics .

    Sachant que je ne discute pas l'utilité des interfaces.
    Je veux faire une relation "est un sorte de" sans passer par les interfaces sachant que c'est le moyen pour faire de l'héritage multiple avec le mot clé implements , car mes classes comme le voyer sur l'exemple implémente des méthodes (constructeurs).

    S'il y a un autre moyen de le faire dit le moi .

    Merci pour votre aide.

  13. #13
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    @Robin56: il faut que tu vérifie ton code ou cas ou j'ai raison, car il est impossible de créer une instance à partir d'une classe abstraite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public abstract B implements IB {
      void methodB() {  //code  }
    }
     
    public C implements IA, IB {
      private IB b = new B();
      private IA a = new A();

  14. #14
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par naou18 Voir le message
    @Robin56: il faut que tu vérifie ton code ou cas ou j'ai raison, car il est impossible de créer une instance à partir d'une classe abstraite.
    Retire le mot clé abstract de la classe B.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  15. #15
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Dans ce que cas bien précis même en retirant abstract les interfaces ne font que surcharger le code.

    Merci pour votre aide.

  16. #16
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Dans ce que cas bien précis même en retirant abstract les interfaces ne font que surcharger le code.
    Les interfaces ne surchargent pas le code puisqu'elles obligent à garder pour la classe C le même formalisme que les classes qu'elle "sous-classe" (A et B).

    Exemple ici : obligation d'avoir deux méthodes methodA et methodB ayant une signature similaire aux classes parentes.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  17. #17
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class EtudiantSalarie{
    private Etudiant e ;
    private Salarie s ;
    public EtudiantSalarie(String nom , String prenom , String sportPratique , int salaire ,
    String anneeEtude){
    e = new Etudiant(anneeEtude , nom , prenom , sportPratique) ;
    s = new Salarie(nom , prenom , sportPratique , salaire) ;
    }
    }
    Et ça éviterai que tu ai des répétitions de variables (si ça c'est pas de la surcharge)...
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  18. #18
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Eritage multible, c'est possible!
    Une classe A peut hériter de deux classes mais elle serait pas la fille des deux classes ! en effet, elle peut hériter de sa grand mère aussi lol;

    B extends A et C extends B, du coup C hérite de A et B !

  19. #19
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    On évitera les up inutiles de sujets vieux de 7 ans SVP...
    A noter que désormais que les interfaces peuvent contenir des méthodes par defaut (JDK 8) ou privees (JDK 9), ça peut relancer cependant les soucis habituels de l’héritage en diamant.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Héritage multiple en Java
    Par nsanabi dans le forum Général Java
    Réponses: 3
    Dernier message: 26/01/2011, 18h58
  2. Héritage multiple en JAVA
    Par y.medium dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2008, 23h59
  3. Héritage multiple en Java
    Par bim92i dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 28/08/2008, 09h17
  4. [DC] Héritage multiple (en java)
    Par c0rt0 dans le forum Diagrammes de Classes
    Réponses: 6
    Dernier message: 20/02/2008, 10h52
  5. [heritage][conception]héritage multiple en java!
    Par soulhouf dans le forum Langage
    Réponses: 9
    Dernier message: 25/08/2005, 20h03

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