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 static


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Par défaut Héritage et static
    Bonjour

    J'ai une question sur l'héritage de variable static. Après un rapide test, j'ai remarqué que toutes les filles et la mère partagent la même variable static :

    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
    abstract class Humain {
        static public int nombre;
     
        static public void main(String[] args) {
            Homme.nombre=0;
            Homme adam = new Homme();
            Homme.nombre+=1;
            Femme eve= new Femme();
            Femme.nombre+=1;
            System.out.println(Femme.nombre); // résultat 2
            System.out.println(Homme.nombre); // résultat 2
    }
     
    class Homme extends Humain {
    }
     
    class Homme extends Humain {
    }
    Ma question est la suivante :

    Y a-t-il moyen de dire que toutes les classes filles possède cette variable, mais qu'elle soit différente d'une classe à l'autre. un peu comme une méthode abstraite, mais avec une variable statique.

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Tu n'as qu'à essayer Tiens nous au courant si tu y arrives ! Sinon ...
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    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
    Salut,



    Les attributs ne n’héritent pas, tout comme les éléments static...


    Que veux-tu faire précisément ??? Compter le nombre d'instance de chaque classe fille ???


    a++

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Par défaut
    J'essaie de modéliser un jeu où le concept est de développer ses bâtiments. J'ai 2 types de bâtiments. Les bâtiments de production et les autres.

    Le prix d'un batiment augmente à chaque niveau selon un coefficient. Le coefficient pour les bâtiments de production est 1,5 et celui pour les autres est 2. Potentiellement, avec l'évolution du jeu, d'autres types vont se rajouter, avec d'autres coefficients.

    Ainsi, tous les bâtiments ont un coefficient, ce qui en fait un attribut de la classe mère. Mais comme il change en fonction de la classe et non de l'instance, j'ai besoin d'un static.

    Seulement, définir le static dans la classe mère fait que toutes les classes filles partagent la même variable... Je suis donc coincé, sans savoir que faire.

  5. #5
    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
    Tu peux utiliser une Map associative, ou pour chaque classe tu associes ton coefficient...


    a++

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Type de batiment est peut être une classe/énumération qui aurait un attribut coéfficient
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #7
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Par défaut
    Eh bien non, ce n'est pas simplement un énum... Par exemple, un bâtiment de production a des fonctions (de production ^^) que n'ont pas les bâtiments standard. Quant à faire un attribut propre à chaque classe, ça retire la possibilité de traiter de la même manière le coefficient de n'importe quel bâtiment.

    Concernant l'utilisation de Map, je n'y avais pas pensé... Je n'en ai jamais utilisé donc je ne sais pas exactement comment ça fonctionne.

    Ce que j'imagine, sans m'être plongé dedans :avoir le nom de la classe et son coefficient associé dans un objet Map static de la classe mère. Chaque classe "s'ajoute" à la Map lors de l'initialisation du programme. Ensuite, quand on construit un bâtiment pour connaitre le coût on utiliserait getClass pour retrouver le coefficient dans la map. j'ai bien compris comment fonctionne une Map ?

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je ferais quelque chose dans ce genre

    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
    public abstract class BatimentMere {
        protected abstract float getCoefficient();
        public void faireUnTruc(){
            /////
            ......getCoefficient()......; 
            /////
        }
    }
     
    public class BatimentFilleA extends BatimentMere{
        protected abstract float getCoefficient(){return 1}
    }
     
    public class BatimentFilleB extends BatimentMere{
        protected abstract float getCoefficient(){return 1.5}
    }

  9. #9
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Citation Envoyé par cycloop Voir le message
    Eh bien non, ce n'est pas simplement un énum... Par exemple, un bâtiment de production a des fonctions (de production ^^) que n'ont pas les bâtiments standard. Quant à faire un attribut propre à chaque classe, ça retire la possibilité de traiter de la même manière le coefficient de n'importe quel bâtiment.
    Les énumérations n'empêchent pas ça.

    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
     
    enum TypeBatiment {
      // Producers
      PRODUCER1() {
        public boolean isProducer() { return true; }
        public float     getCoefficient() { return 1.0f; }
      },
      PRODUCER2() {
        public boolean isProducer() { return true; }
        public float     getCoefficient() { return 2.0f; }
      },
      // Defense
      DEFENSE1() {
        public boolean isProducer() { return false; }
        public float     getCoefficient() { return 1.0f; }
      },
      DEFENSE2() {
        public boolean isProducer() { return false; }
        public float     getCoefficient() { return 2.0f; }
      };
     
      public abstract boolean isProducer();
      public abstract float getCoefficient();
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. Héritage et Static
    Par nicolas.poulain dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2011, 18h49
  2. [PHP 5.3] Questions héritage class static
    Par Général03 dans le forum Langage
    Réponses: 12
    Dernier message: 13/05/2011, 15h40
  3. [POO] Méthode static et héritage
    Par Mogwaï dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2008, 12h31
  4. [POO] Héritage et variable static
    Par Al3x dans le forum Langage
    Réponses: 3
    Dernier message: 23/12/2007, 17h27
  5. [héritage] héritage d'une variable static
    Par yaya44 dans le forum Langage
    Réponses: 14
    Dernier message: 29/09/2004, 13h36

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