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 :

constructeur pour classe abstraite


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Points : 53
    Points
    53
    Par défaut constructeur pour classe abstraite
    Bonjour
    je mets en pratique la notion d'interface et abstraite.
    Ce que j'arrive pas à enregistrer est la création d'un constructeur pour une classe abstraite employés.
    Pourquoi crée un constructeur pour une classe qu'on ne peut pas instancier.
    si j'ai bien compris, une classe Abstraite n'est pas instanciable.

    Merci de m'éclairer.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur java, .Net
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur java, .Net

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Points : 71
    Points
    71
    Par défaut
    Une classe abstraite est un peu un modèle et ce sont ses classes dérivées qui peuvent être instanciées.

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

    si ta classe C hérite d'une classe P (abstraite ou non), chacun des constructeurs définis dans C appellera un constructeur de la classe P.

    Même si tu ne mets pas d'appel explicite "super()", l'appel est fait.
    Ainsi, les deux codes sont équivalents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class A {
      public A() {
        super();
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class A {
      public A() {
      }
    }
    Sachant cela, tu peux avoir envie d'initialiser des membres de ta classe abstraite à l'initialisation. C'est à cela que servira un constructeur dans la classe abstraite.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    si une classe abstraite ne peut être instanciée, c'est quand même une classe avec des méthodes et des attributs : il est donc nécessaire d'avoir un constructeur.

    par 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public abstract class AbstractOperation  {
     
        protected final String operateur;
        protected final int nombreOperandesMinimum;
        protected final int nombreOperandesMaximum;
     
        public AbstractOperation(String operateur, int nombreOperandesMinimum) {
            this(operateur, nombreOperandesMinimum, -1);
        }
        public AbstractOperation(String operateur, int nombreOperandesMinimum, int nombreOperandesMaximum) {
            this.operateur=operateur;
            this.nombreOperandesMinimum=nombreOperandesMinimum;
            this.nombreOperandesMaximum=nombreOperandesMaximum;
        }
     
        public final String getOperateur() {
           return operateur;
        }
     
        public final int calcule(int...operandes) {
            if ( operandes.length<nombreOperandesMinimum ) throw new IllegalArgumentException("Pas assez d'opérandes");
            if ( nombreOperandesMaximum!=-1 && operandes.length>nombreOperandesMaximum) throw new IllegalArgumentException("Trop d'opérandes");
            int resultat=0;
            for(int operande : operandes) {
               resultat = appliqueOperateur(resultat,operande);
            }
            return resultat;
        }
     
        protected abstract int appliqueOperateur(int resultatPrecedent, int operande);
     
        public String toString() {
            return operateur;
        }
     
        public String toString(int...operandes) {
    if ( operandes.length<nombreOperandesMinimum ) throw new IllegalArgumentException("Pas assez d'opérandes");
            if ( nombreOperandesMaximum!=-1 && operandes.length>nombreOperandesMaximum) throw new IllegalArgumentException("Trop d'opérandes");
             StringBuilder sb=new StringBuilder();
             for(int i=0;i<operandes.length;i++) {
                 if (i>0) sb.append(operateur);
                 sb.append(i);
             }
             return sb.toString();
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class OperateurPlus extends AbstractOperateur {
     
       public OperateurPlus() {
           super("+",2);
       }
     
        protected final int appliqueOperateur(int resultatPrecedent, int operande) {
            return resultatPrecedent + operande;
        }
     
    }
    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 OperateurFactorielle extends AbstractOperateur {
     
       public OperateurFactorielle() {
           super("!",1,1);
       }
     
        protected final int appliqueOperateur(int resultatPrecedent, int operande) {
            int factorielle=1;
            for(int i=2; i<operande; i++){
                factorielle*=i;
            }
            return factorielle;
        }
     
    public String toString(int...operandes) {
    if ( operandes.length<nombreOperandesMinimum ) throw new IllegalArgumentException("Pas assez d'opérandes");
            if ( nombreOperandesMaximum!=-1 && operandes.length>nombreOperandesMaximum) throw new IllegalArgumentException("Trop d'opérandes");
          return operande[0]+operateur;
        }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Merci, pour vos éclaircissements.

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

Discussions similaires

  1. Constructeur pour classe vecteur
    Par zopet dans le forum C++
    Réponses: 3
    Dernier message: 21/01/2011, 12h01
  2. constructeur de classe abstraite
    Par totoche dans le forum Langage
    Réponses: 1
    Dernier message: 26/02/2009, 11h06
  3. constructeur de classe abstraite
    Par sydius dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 21/08/2008, 12h03
  4. Classe abstraite et constructeurs
    Par koala01 dans le forum C++
    Réponses: 6
    Dernier message: 21/08/2006, 01h00
  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