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 :

Difficulté avec classe abstraite


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 53
    Points
    53
    Par défaut Difficulté avec classe abstraite
    Bonjour tout le monde.

    J'ai des difficultés à comprendre comment ça fonctionne.

    Un ami m'a donné les classes suivante et j'essai de faire le "main" pour afficher les lignes :
    - Coupe fraise framboise cassis + 6,00
    - Coupe chocolat blanc chocolat au lait chocolat noir + 6,00

    Voici les class :

    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 CoupeGlacee {
       protected List Parfums;
     
       protected CoupeGlacee()  {}
     
       public String description() {
            StringBuffer sb = new StringBuffer("");
            for(Iterator it = Parfums.iterator();it.hasNext();) {
                sb.append(it.next().toString());
            }
            return sb.toString();
        }
     
       public abstract float 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
     
    public class TripleChocolat extends CoupeGlacee {
        public static final TripleChocolat SINGLETON = new TripleChocolat();
     
       private TripleChocolat() {
          this.Parfums.add(Parfum.CHOCOLAIT);
          this.Parfums.add(Parfum.CHOCONOIR);
          this.Parfums.add(Parfum.CHOCOBLANC);
       }
     
       public float prix() { 
          return (float)6;
       }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class FruitsRouges extends CoupeGlacee {
       public static final FruitsRouges SINGLETON = new FruitsRouges();
     
       private FruitsRouges() {
          this.Parfums.add(Parfum.FRAISE);
          this.Parfums.add(Parfum.FRAMBOISE);
          this.Parfums.add(Parfum.CASSIS);
       }
     
       public float prix() { 
          return (float)5.5;
       }
    }

    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 Parfum {
     
        private String nom;
     
        public static final Parfum FRAISE = new Parfum("fraise");
        public static final Parfum FRAMBOISE = new Parfum("framboise");
        public static final Parfum CASSIS = new Parfum("cassis");
        public static final Parfum CHOCOLAIT = new Parfum("chocolat au lait");
        public static final Parfum CHOCONOIR = new Parfum("chocolat noit");
        public static final Parfum CHOCOBLANC = new Parfum("chocolat blanc");
     
        private Parfum(String s) {
            this.nom = s;
        }
     
        @Override
        public String toString() {
            return this.nom;
        }
    }

    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 Commande {
        protected List lesCoupes; 
     
        public Commande() {}
     
        public void addCoupeGlacee(CoupeGlacee coupe) {
            this.lesCoupes.add(coupe);
        }
     
        public void editerFacture(PrintWriter writer) {
            float total = 0;
     
            for (Iterator it = this.lesCoupes.iterator(); it.hasNext();) {
                CoupeGlacee coupe =  (CoupeGlacee) it.next();
                writer.println(coupe.description()+" + "+coupe.prix());
                total = total + coupe.prix();
            }
            writer.println("   TOTAL : "+total);
        }
    }
    Voilà. Ce sont les class que mon ami m'a donné pour m'exercer.

    Cependant je n'arrive pas à afficher les lignes cité au début.

    Je sais que l'on ne peut pas instancier une classe abstraite, mais la je ne vois vraiment pas comment faire.

    Si une personne passe par ici et à le temps de partager son savoir je suis toute ouï ^^

    Amicalement Boobs60.

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonjour,

    Normalement, CoupeGlacee c'est ta classe mère avec ce qu'il y a en commun entre tes différents parfum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CoupeGlacee coupe1 = new tripleChocolat();
    CoupeGlacee coupe2 = new FruitsRouges ();
    avec sa tu peux utiliser sur coupe1 les méthodes de coupeGlacee et tripleChocolat.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 53
    Points
    53
    Par défaut
    Merci de ta réponse XxArchangexX.

    Mais justement c'est ce que j'avais fait au départ, mais les méthodes TripleChocolat et FruitsRouges sont "Private", il n'y a que les attributs triplechocolat et fruitsrouges qui sont en public et en singleton.

    Du coup j'ai essayé de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CoupeGlacee coupe1 = TripleChocolat.SINGLETON;
    CoupeGlacee coupe2 = FruitsRouges.SINGLETON;
    Donc avec ça, je n'ai pas d'erreur qui s'affiche dans ma class.
    Mais lorsque je lance le projet, j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    run:
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at glacier.main.main(main.java:15)
    Caused by: java.lang.NullPointerException
    	at glacier.TripleChocolat.<init>(TripleChocolat.java:15)
    	at glacier.TripleChocolat.<clinit>(TripleChocolat.java:12)
    	... 1 more
    Java Result: 1
    Je ne comprend pas ?

    Merci d'avance à ceux qui pourront m'aider.

    Amicalement Boobs60

  4. #4
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Je n'avais pas vu mais pourquoi tes constructeurs sont en private ^_^°, c'est tes variables qui doivent être en private et les méthodes public.

    Deplus je trouve bizarre d'instancier un objet dans sa propre classe.

    essaye dans ton main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CoupeGlacee coupe1 = new tripleChocolat();
     
    System.out.println(coupe1.prix);
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 53
    Points
    53
    Par défaut
    Ok je vais essayer ça mais du coup à quoi va me servir cette ligne dans la class TripleChocolat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static final TripleChocolat SINGLETON = new TripleChocolat();
    Car d'après ce que mon ami m'a dit, les class TripleChocolat et FruitsRouges sont des SINGLETON et donc ne doivent et ne peuvent être instancié qu'une fois.

    Amicalement

  6. #6
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Comme je te l'ai dis pour ma part je trouve cette ligne bizarre et si tu l'utilises pour l'unicité sauf contradiction de quelqu'un il me semble qu'il est tout à fait possible de dupliquer un objet instancié et l'unicité ne ce fait donc pas. Mais si tu fais une instanciation dans le main il y en aura qu'une de toute façon donc sa revient au même ^_^.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  7. #7
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    pourquoi se torturer à faire compliqué:
    Parfum et CoupeGlace sont des enums!
    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
     
    public enum Parfum {
        CARCAJOU, CAPYBARA, MOUFFETTE ;
    }
     
    public enum CoupeGlacee {
        TABERNACLE(5.5, Parfum.CARCAJOU),
         PARADIS(10.10, Parfum.CAPYBARA, Parfum.MOUFFETTE);
     
        private double prix ;
        private Parfum[] parfums ;
     
        private CoupeGlacee(double prix, Parfum... parfums) {
            this.prix = prix;
            this.parfums = parfums;
        }
     
        public double getPrix() {
            return prix;
        }
     
        public Parfum[] getParfums() {
            return parfums;
        }
    }
    etc. etc...
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 53
    Points
    53
    Par défaut
    Bonsoir et merci à vous 2 pour vos réponse.

    J'ai finalement trouvé d'ou venait le problème. J'utilisais des List qui n'était pas instanciées du coup NullPointerException.

    Amicalement Boobs60

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

Discussions similaires

  1. Difficultés avec class et struct
    Par tom31 dans le forum C++
    Réponses: 3
    Dernier message: 31/01/2011, 12h02
  2. Problème avec classe abstraite
    Par Antoniom dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 29/01/2011, 13h03
  3. Pb avec classe abstraite
    Par darkskill dans le forum C++
    Réponses: 3
    Dernier message: 08/05/2008, 13h37
  4. Erreur du designer avec héritage d'une classe abstraite
    Par Xzander dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2007, 00h36
  5. Réponses: 6
    Dernier message: 27/07/2005, 09h06

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