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 :

Héritage et classes


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Par défaut Héritage et classes
    Bonsoir.

    Petit problème dont j'ai presque honte de poser la question vu qu'il me semble que je le savais... mais impossible de m'en rappeler.

    le probleme.

    J'ai une classe, disons Personne.

    2 autres classes, Passant et Employe qui héritent de Personne

    Dans la classe employe, je mets l'attribut "salaire", et l'accesseur getSalaire()

    Maintenant, je veux savoir si une personne que je passe en parametre a un salaire.

    J'ai uen fonction private boolean estSalarie(Personne p).

    Comment faire, avec la Personne, pour acceder à l'attribut "salaire" situé dans la classe "en dessous" (a savoir ici employe) ? impossible de faire un if(p.getSalaire())

    Sachant qu'il est hors de question de testé en dur si la personne est un employe (si on rajoute 4000 autres classes qui peuvent avoir un salaire, mauvais de rajouter tout ca en dur...), et que j'ai besoin de faire un traitement particulier si la personne n'a pas de salaire

    Merci d'avance...

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Si je comprends bien, seule la classe Employe dispose d'un attribut salaire et de l'accesseur correspondant. Ensuite, ayant un objet de type Personne, tu veux connaître son salaire à la condition que cet objet soit effectivement un Employe.
    De deux choses l'une :
    soit tu remontes l'attribut salaire dans la classe Personne (ce qui me paraît le plus élégant et le plus simple), quitte à ce que Personne soit une classe abstraite ou propose une implémentation par défaut de getSalaire(), renvoyant 0 ou levant une exception UnsupportedOperation.
    soit tu es obligé de tester explicitement le type effectif de ton objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Personne personne = ...;
     
    if (personne instanceof Employe) {
      int salaire = ((Employe) personne).getSalaire();
      ...
    }
    Si ça te gêne de tester explicitement par rapport au type Employe (cf. ta remarque sur les 4000 autres classes), tu passes par une interface :
    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
    interface Salarie {
      int getSalaire();
    }
     
    class Employe implements Salarie {
      public int getSalaire() {
        ...
      }
    }
     
    Personne personne = ...;
     
    if (personne instanceof Salarie) {
      int salaire = ((Salarie) personne).getSalaire();
      ...
    }

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    A ta place je mettrai getSalaire() en methode abstraite au niveau de Personne. Dans Salarie tu l'implementes pour renvoyer l'attribut salaire, dans Passant tu renvoies null.

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par the-gtm
    A ta place je mettrai getSalaire() en methode abstraite au niveau de Personne. Dans Salarie tu l'implementes pour renvoyer l'attribut salaire, dans Passant tu renvoies null.
    Euh, c'est pas très correct, c'est une astuce, pas une bonne conception

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Par défaut
    la surcharge!!!!

    j'me disais bien que ct un truc con...

    cette manie de réfléchir en c++ et se dire "virtual c pas reconnu T T"

    merci!

  6. #6
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    C'est pas que virtual n'est pas reconnu, mais que toutes les fonctions en Java sont "virtuelles"

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

Discussions similaires

  1. conflit d'inclusions et Héritage de classe
    Par gedeon555 dans le forum C++
    Réponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  3. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

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