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 :

[Language]héritage


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut [Language]héritage
    Bonjour,

    J'ai une petite question de débutant:

    Si j'ai une classe A qui hérite de B et que B hérite de C.
    Est ce que A hérite de C ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Oui.

  3. #3
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Si A héritait de C on serait donc devant de l'héritage multiple, ce qui n'est pas autorisé en java.
    B herite de C, et peut donc redéfinir des méthodes de la classe C.
    Si A herite de B, tu hérites donc des methodes redefinient dans la classe B.

    Tu suis ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Ok Merci beaucoup

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Pas sur que ce soit du multiple ca...
    Multiple, c'est quand un classe hérite des plusieurs autres classes directement...
    La c'est un autre cas, tu hérite d'une classe, qui hérite d'une autre classe...c'est pas du multiple...
    Le modèle objet de java fonctionne comme ca...tu prends n'importe quel élément dans la java doc tu peux a chaque fois remonter de plusieurs niveaux...
    La preuve...tous les objets hérite de la classe Object...c'est pas pour ca qu'on peux plus faire d'autre héritage...

  6. #6
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Je ne suis pas d'accord,
    Si la methode setup() de la classe C est "System.out.println("classe C");"
    Si la classe B, qui hérite de C redéfinit la methode setup() en "System.out.println("classe B");"
    et que tu appelles la classe A sans redéfinir setup, en faisant super(), tu récupères "System.out.println("classe B");" et donc tu n'hérites pas de C, mais bien de B.

    C'est en tout cas mon avis.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Tout a fais d'accord avec toi, mais parce que tu surcharge dans la classe B la méthode setup() de la classe C
    Si tu ne surchage pas dans la classe B ni dans la classe A, quand on appelle setup() dans la classe A, tu auras ca : System.out.println("classe C");

  8. #8
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Autre exemple, tu peux très bien avoir la methode "testHeritage()" dans la classe B en plus des methodes de la classe C.
    Ta classe A, qui hérite de B, pourrat donc appeler la methode "testHeritage" qui n'existe pas dans la classe C.
    A n'hérite donc pas de C.
    CQFD.

  9. #9
    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 Regis.C
    Autre exemple, tu peux très bien avoir la methode "testHeritage()" dans la classe B en plus des methodes de la classe C.
    Ta classe A, qui hérite de B, pourrat donc appeler la methode "testHeritage" qui n'existe pas dans la classe C.
    A n'hérite donc pas de C.
    CQFD.
    Faux !

    Tu prends le problème à l'envers...

    Tu as les héritage suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C
    |
    +--> B
        |
        +--> A
    Si testHeritage() est défini dans B c'est normal qu'elle soit accessible dans A et pas dans C...
    Cela ne change rien au fait que A hérite de C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A a = new A();
    if (a instanceof C) println ("A est une instance de C");
    Ce n'est pas de l'héritage multiple mais de l'héritage indirect (A n'hérite pas directement de C).

    a++

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Merci de ton soutien adiGuba!

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut
    Je suis entierement d'accord avec adiGuba. Ce n'est pas de l'heritage multiple ! On devrait si c'etait le cas avoir :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    C      C2
    |       |
    +-->B<--+
        |
        +-->A;
    Par contre , je ne suis pas d'accord sur le fait que l'heritage multiple est interdit en JAVA et les interfaces alors ???

    [edit] pas simple l'indentation dans les balises code lol [/edit]

  12. #12
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Les interfaces ce n'est pas de l'héritage multiple...

    L'héritage multiple tu peux hériter de plusieures classes...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Bah les interfaces c'est justement pour éviter l'héritage multiple...
    On a le droit a un seul héritage (extends) et autant d'interface que l'on souhaite (implements)...voila!
    Par contre quand on fais un super, ca concerne l'héritage, et pas les interfaces..

  14. #14
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut
    Je doit pas etre reveillé mais je comprend rien à ce que vous dites ? Vous pourriez preciser avec des exemples ou avec plus de détails ce que vous essayer de dire sur les interfaces ?

  15. #15
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par adiGuba
    Ce n'est pas de l'héritage multiple mais de l'héritage indirect (A n'hérite pas directement de C).

    a++
    D'accord avec "l'heritage indirect" mais ce n'est pas un héritage du même ordre que B hérite de C.

  16. #16
    Invité de passage
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1
    Par défaut
    Citation Envoyé par tomca
    Bah les interfaces c'est justement pour éviter l'héritage multiple...
    On a le droit a un seul héritage (extends) et autant d'interface que l'on souhaite (implements)...voila!
    Par contre quand on fais un super, ca concerne l'héritage, et pas les interfaces..
    Exactement !!

    En langage objet ca existe l heritage multiple mais pas en java d'ou les interfaces.

    Contrairement au C++ qui ne gere pas les interfaces mais qui gere l'heritage multiple (a utiliser avec enormement de precaution !!!!)

    En tout cas ici c pas de l heritage multiple mais plutot de l heritage en cascade et ca, ca n a rien de genant tant que ca reste utile biensur ...

  17. #17
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class Toto extends Parent {
    }
    tu ne peux pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class Toto extends Parent1, Parent2 {
    }
    tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class Toto implements Interface1, Interface2 {
    }

  18. #18
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par chicorico
    Je doit pas etre reveillé mais je comprend rien à ce que vous dites ? Vous pourriez preciser avec des exemples ou avec plus de détails ce que vous essayer de dire sur les interfaces ?
    Une interface ne définit que les signatures de methodes, et ne définit pas de methodes à proprement parler.
    Tu peux donc implémenter plusieurs interfaces en implémentant des methodes d'interfaces différentes dans une seule classe.

  19. #19
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Par contre quand on fais un super, ca concerne l'héritage, et pas les interfaces..
    Je comprends pas ce que ça veut dire...

    Quand tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public classe Test extends Parent implements ISeconde {
    ...
    }
    et si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test test = new Test(...);
    tu peux avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (test instance of Parent)
    qui est vrai

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (test instanceof ISeconde)
    qui est vrai...

    Donc l'héritage prends aussi en compte les interfaces...

    Mais effectivement super n'as pas de sens dans le cas d'une méthode d'interface, parceque celle-ci n'existe pas dans l'interface...

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

Discussions similaires

  1. quel est le Meilleur language pour piloter le port serie ?
    Par flyfab dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 21/07/2003, 10h03
  2. [postgresql] Probleme de language SQL
    Par sbucci dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/05/2003, 13h19
  3. Language
    Par bidson dans le forum XMLRAD
    Réponses: 4
    Dernier message: 10/05/2003, 19h28
  4. [Appli][Autre language]dll-contenant form
    Par flash dans le forum Langage
    Réponses: 6
    Dernier message: 20/09/2002, 14h18
  5. je veux apprendre la programmation quel language choisir??
    Par existance dans le forum Débuter
    Réponses: 26
    Dernier message: 06/08/2002, 05h32

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