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 :

Aide sur l'héritage


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chômeur
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chômeur

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Aide sur l'héritage
    Bonjour,

    je débute avec Java dans le but d'une reconversion professionnelle. Après plusieurs semaines à découvrir un peu le bouzin, j'essaie d'aborder la POO et l'héritage avec divers exercices trouvés sur le net, comme celui-ci :

    La classe Animal comporte deux sous-classes Mammifere et Poisson ; la classe Mammifere comporte elle-même deux nouvelles sous-classes : Chien et Homme. Modéliser et créer ces différentes classes en Java de telle sorte que la classe TestAnimal donnée comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class TestAnimal {
    public static void main(String[] args) {
    Animal[] animaux = new Animal[5];
    animaux[0]=new Animal("Truc");;
    animaux[1]=new Animal();
    animaux[2]=new Chien("Medor");
    animaux[3]=new Homme() ;
    animaux[4]=new Homme ("Robert") ;
    for (int i=0; i<5; i++) {
    System.out.println(animaux[i].getType());
    }
    }
    }
    affiche le résultat suivant :

    Je suis un animal de nom Truc.
    Je suis un animal.
    Je suis un animal de nom Medor. Je suis un mammifere. Je suis un chien.
    Je suis un animal. Je suis un mammifere. Je suis un homme.
    Je suis un animal de nom Robert. Je suis un mammifere. Je suis un homme.
    J'ai bien compris que ça doit ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Animal { }
     
    public class Mammifere extends Animal { }
     
    public class Poisson extends Animal { }
     
    public class Chien extends Mammifere { }
     
    public class Homme extends Mammifere { }
    Mais j'ai du mal à comprendre où placer et que doivent faire les différentes méthodes. Un getType uniquement dans Animal ou un par classe fille ?
    Je ne vois pas à quoi doit ressembler le squelette des classes...

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par LuckyLarry Voir le message
    Mais j'ai du mal à comprendre où placer et que doivent faire les différentes méthodes. Un getType uniquement dans Animal ou un par classe fille ?
    Je ne vois pas à quoi doit ressembler le squelette des classes...
    Tu dois avoir une méthode getType() par classe fille. Du moins là où cela a un intérêt.

    Si tu fais un getType() unique dans la classe Animal tu ne fais pas vraiment de l'héritage, puisque la classe Animal devra alors connaitre toutes les classes filles pour générer le nom format.

    => chaque sous-classe devra gérer la partie du message correspondant.


    Ta classe Animal doit donc contenir la méthode getType() affichant "Je suis un animal", sans oublier les constructeurs et l'attribut "nom" :

    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
    public class Animal {
        private final String nom;
     
        public Animal() {
            this(null);
        }
     
        public Animal(String nom) {
            this.nom = nom;
        }
     
        public String getType() {
            String type = "Je suis un animal";
            if (this.nom!=null) {
                type += " de nom " + this.nom + ".";
            } else {
                type += ".";
            }
            return type;
        }
    }

    Ensuite pour chaque sous-type tu dois au minimum définir les constructeurs et éventuellement la méthode getType() fournissant les informations supplémentaires.
    Par exemple pour Mammifere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Mammifere extends Animal {
        public Mammifere() {
            super();
        }
     
        public Mammifere(String nom) {
            super(nom);
        }
     
        public String getType() {
            return super.getType() + " Je suis un mammifere.";
        }
    }

    Et ainsi de suite pour chaque sous-type...

  3. #3
    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
    C'est aussi ce que je pense, mais le résultat attendu dans l'exercice me dérange.

    En fait je dirais que l'exercice s'en fout un peu de l'héritage, et que Poisson et Mammifere sont sous-classes de Animal, et Chien et Homme sous-classes de Mammifere, juste parce que l'exercice le dit et parce que quelque part c'est évident.
    Mais pas pour que ça serve à quelque chose.

    La méthode getType(), elle est très mal nommée : ce qu'elle doit rendre c'est un nom, pas un type, et c'est le nom passé dans le constructeur.
    C'est nul comme exercice mais c'est comme ça, c'est ce que dit l'exercice.

    Et dans ce cas, ça ne sert à rien de définir getType() partout : elle renvoie juste le nom donné dans le constructeur. Ça fonctionne pareil pour Animal et toutes ses classes descendantes, donc ça sert à rien de le faire ailleurs que dans Animal.
    Il te faut aussi une variable d'instance pour stocker le "type" (qui est en fait un nom) passé en constructeur. Bien sûr c'est la classe Animal qui doit l'avoir, et ça marchera pour les autres aussi parce que ce sont ses sous-classes et qu'elles héritent de getType().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    getType() est assez mal nommé en effet.
    Mais de ce que j'en comprend il ne renvoi pas le nom passé en paramètre du constructeur, mais une phrase décrivant l'animal, avec éventuellement son nom.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Je suis un animal de nom Robert. Je suis un mammifere. Je suis un homme.
    Pour moi chaque sous-classe doit redéfinir la méthode pour rajouter des détail sur le type de la classe.

  5. #5
    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
    Oh, pardon en effet je me suis complètement planté. C'est juste getType() qui est mal nommée mais je me suis trompé sur ce que ça aurait dû être à la place.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chômeur
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chômeur

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup à vous deux pour votre aide

    Je m'imaginais quelque chose de plus ardu, c'est sans doute ce qui m'a perturbé...

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

Discussions similaires

  1. demande d'aide sur samba
    Par marcoss dans le forum Développement
    Réponses: 5
    Dernier message: 04/12/2003, 19h38
  2. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  3. Réponses: 2
    Dernier message: 27/02/2003, 01h33
  4. [Kylix] Aide sur BitBlt
    Par mic006 dans le forum EDI
    Réponses: 1
    Dernier message: 10/12/2002, 22h54
  5. Aide sur une fenetre
    Par Ray-j dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 29/11/2002, 08h51

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