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 :

Problème d'héritage


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème d'héritage
    Bonsoir à tous,
    J'ai un petit (voir gros) trou de mémoire et donc quelques vides à combler.
    Je vous explique la situation.

    J'ai une classe mère (logement) et 2 classes filles héritées de cette classe mère (maison et appartement). Les 2 classes filles ont un attribut spécifique (surface de terrain pour les maisons et étage pour les appartement).
    J'ai une classe main où je crée une arraylist des logements et où j'en ajoute pour les tests comme ci dessous

    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
    static List<logement> listeLogements;  
     
        public static void main(String[] args) {
     
            listeLogements = new ArrayList<logement>();
            appartement a1 = new appartement("1 rue des bois", 60, 120000, 1970, 1 );
            appartement a2 = new appartement("12 avenue des tables", 80, 170000, 1990, 4 );
            maison m1 = new maison("1 chemin des petunias", 120, 210000, 1982, 100);
            maison m2 = new maison("125 rue des 3 epis", 100, 170000, 1968, 0);
            maison m3 = new maison("12 route des fers", 180, 320000, 1999, 500);
            listeLogements.add(a1);
            listeLogements.add(a2);
            listeLogements.add(m1);
            listeLogements.add(m2);
            listeLogements.add(m3);
     
        }
    1er problème :

    Les maisons et appartements ont un indice différent qui défini leurs prix de vente que je dois calculer.
    J'avais pensé faire ce calcul dans la classe mère mais comment savoir si c'est une maison ou un appartement

    2eme probleme :

    Je dois pouvoir afficher toute les caractéristiques des différents logements. Donc j'avais pensé à parcourir avec une boucle for mon arrayList de logements comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (logement l : listeLogements) {
                l.afficherInfo();    
            }
    Puis d'afficher les infos une par une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void afficheInfo(){
            System.out.println(adresse);
            // ect..
        }
    Cependant comment puis-je récupérer et afficher la dernière information se trouvant dans la classe fille.

    Merci d'avance pour me rafraîchir la mémoire.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour

    1er problème :

    Les maisons et appartements ont un indice différent qui défini leurs prix de vente que je dois calculer.
    J'avais pensé faire ce calcul dans la classe mère mais comment savoir si c'est une maison ou un appartement
    Il faut faire le calcul dans une classe fille, cela me semble plus logique. Au pire (ou au mieux ), déclarez une fonction protégée virtuelle pure (abstract je crois en java) dans la classe mère qui sera défini dans les classes filles, et appelé dans le constructeur de la classe mère. (Dans la classe fille, les fonctions seront privées)

    2eme problème
    Bah, implémentez une fonction virtuelle pure (abstract) dans la mère, faites la surchargé dans les filles et appelez la pour faire l'affichage.

    J'espère avoir été clair
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    Bonjour Ivan21,

    1er problème :

    Les maisons et appartements ont un indice différent qui défini leurs prix de vente que je dois calculer.
    J'avais pensé faire ce calcul dans la classe mère mais comment savoir si c'est une maison ou un appartement
    En POO, lorsque tu fais l'héritage, vaut mieux mettre les attributs et méthodes les plus génériques dans la classe mère. Puis les classes qui l'héritent ne doivent que spécialiser cette classe mère en rajoutant ou en redéfinissant les attributs et/ou méthodes de cette dernière.

    Cela voudrait dire selon moi que tu devrais mettre les attributs/méthodes de calcul de prix de chaque logement dans la classe fille correspondante (maison, appartement).

    Dans ta classe maison, par exemple, tu développe une méthode qui prend en paramètre les caractéristiques génériques du logement permettant de calculer son prix. Puis, dans le constructeur de ta classe maison, t'auras qu'à appeler super() et ta méthode de calcul de prix.

    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
     
    public maison extends logement{
       double prix;
       double surface;
       public maison(//les parametres){
          super();
          this.prix = calculPrix(//les paramètres);
         //...
       }
     
       public double calculPrix(//les paramètres){
           //...
       }
     //...
    }
    Pareil avec ta classe appartement et à l’intérieur, la méthode calculPrix(...) peut avoir une implémentation différente de celle de maison.

    2)
    pour le deuxième problème, il suffit de faire une redéfinition de la méthode d'affichage de caractéristiques.

    Dans ta classe logement, défini une méthode afficheCaracteristiques() que tu laisse le contenu vide. Tu redéfinira cette méthode dans les classes filles.
    Dans la classe fille, tu peux manipuler les attributs de la classe mère et ceux que tu as déclarer dans cette classe fille.

    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
    29
    30
     
    public logement{
        public logement(//les paramètres){
         //...
        }
     
        public void afficheCaracteristiques(){
        }
     
    }
     
    public maison extends logement{
       double prix;
       double surface;
       public maison(//les parametres){
          super();
          this.prix = calculPrix(//les paramètres);
         //...
       }
     
       public double calculPrix(//les paramètres){
           //...
       }
     
       public void afficheCaracteristiques(){
           //afficher les attributs de la classe mère
          // afficher prix et surface.
       }   
     //...
    }
    En espérant t'avoir aidé. Je m'en excuse si j'ai pas bien compris tes questions.

    Cordialement.

Discussions similaires

  1. [C#] Problème d'héritage, aide svp :(
    Par choas dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/05/2006, 11h46
  2. problème constructeur + héritage
    Par BOLARD dans le forum C++
    Réponses: 10
    Dernier message: 13/04/2006, 08h11
  3. [AS2] Problème d'héritage
    Par wwave dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 27/01/2006, 09h26
  4. Problème d'héritage ?
    Par Romanops dans le forum WinDev
    Réponses: 2
    Dernier message: 16/11/2005, 17h18
  5. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17

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