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 :

Classe abstraite et ses attributs


Sujet :

Langage Java

  1. #1
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut Classe abstraite et ses attributs
    Bonjour,

    Dans une classe abstraite, on peut demander que toutes les classes qui en héritent soient obligées d'avoir une méthode précise, de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract void start();
    Mais est-il possible de demander que chaque classe qui en hérite ait un attribut public, final de type String ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public final String NAME;
    Dans le cas de la classe abstraite Géométrie, toutes les formes (cercle, triangle, ...) auraient un attribut public de nom NAME qui stockerait son nom.

    D'avance merci pour vos réponses.



    xenos

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour,

    d'une certaine manière, c'est possible, même si je conseillerais plutôt de passer par une méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public abstract AbstractClass {
     
        private final String name;
     
        protected AbstractClass(String name) {
            super();
            this.name = name;
        }
     
        public final String getName() {
            return name;
        }
    }
    A noter le final de la méthode getName pour éviter une surcharge.

  3. #3
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Merci pour ta réponse (très) rapide Deaf. Tu dis : "même si je conseillerais plutôt de passer par une méthode". J'imagine que tu proposes un code comme celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract String getName();
    Mais je reste aussi coincé puisque je ne peux pas en faire une méthode static. J'aimerais pouvoir faire : Cercle.getName() ou Cercle.NAME.

  4. #4
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Finalement une solution comme celle ci permet de résoudre mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cercle.class.getSimpleName();
    Triangle.class.getSimpleName();
    Merci de ton aide Deaf.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour info, tout ce qui est static ne concerne pas l'héritage!

  6. #6
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    pour info, tout ce qui est static ne concerne pas l'héritage!
    Oui, je sais. Mais je voulais que toutes les classes qui héritent une classe abstraite aient TOUTES une même méthode static.

    Dommage qu'il ne soit pas possible de demander que tout un groupe de classes, qui hérite un même élément, ait une même méthode static. Qu'ils implémentent chacun de leur manière évidemment ...

  7. #7
    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
    ? Ce serait quoi la syntaxe pour se servir de cette contrainte ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Points : 199
    Points
    199
    Par défaut
    Pour faire "sale" tu peux utiliser la réflexivité (et pourquoi pas un classloader personnalisé) qui permettra de tester tes class à l'exécution, et lever des exceptions.

    Genre tu prend toutes les classes qui hérite de ton interface, tu vérifie leurs attributs static et si dans une il n'y a pas de String NAME, alors tu ne la load pas et/ou lève une exception.

    Il faut bien évidemment mettre un tas d'avertissement du comportement de ton code pour que l'utilisateur comprenne pourquoi il a put lever une telle exception.

  9. #9
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 280
    Points : 347
    Points
    347
    Par défaut
    DEFAULT dans une interface répond aujourd'hui à cette contrainte.
    Terminées les prises de tête pour programmer en php. On procède comme ça : http://cavril.developpez.com/php/ (débutants pressés voulant éviter d'approfondir vers la POO)

  10. #10
    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
    Citation Envoyé par Ah_Kin Voir le message
    DEFAULT dans une interface répond aujourd'hui à cette contrainte.
    Ben non, c'est pas static.

    Et une bonne partie de ce que les méthodes default permettent, pouvait déjà se faire en ayant des méthodes concrètes dans des classes abstraites.

    Les méthodes default sont surtout utiles pour étendre les fonctionnalités des interfaces, par rapport à quand ça n'existait pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [ATL] Accéder à un attribut d'une classe qui hérite d'une classe abstraite
    Par chekaoui dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 22/07/2014, 14h32
  2. Réponses: 10
    Dernier message: 30/11/2008, 21h17
  3. [POO] Classe abstraite et attributs
    Par Info-Rital dans le forum Langage
    Réponses: 1
    Dernier message: 12/08/2007, 13h28
  4. Réponses: 2
    Dernier message: 27/03/2005, 16h09
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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