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 :

Class is not abstract and does not override abstract method in superclass


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Par défaut Class is not abstract and does not override abstract method in superclass
    Bonjour à toutes et à tous,

    j'ai un problème avec le pattern decorator :
    Avec le code qui suit je me retrouve avec le message suivant à la compilation : "error: CoucheChocolat is not abstract and does not override abstract method preparer() in Patisserie
    public class CoucheChocolat extends Couche{"

    Voici le code :
    d'abord une classe abstraite "Patisserie" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public abstract class Patisserie {
        public abstract String preparer();    
    }
    Une classe "Gateau" qui étend la classe "Patisserie" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Gateau extends Patisserie{
        public String preparer(){
            return "Je suis un gâteau et je suis constitué des éléments" + " suivants :\n";
        }    
    }
    Une classe "Couche" qui étend aussi la classe abstraite "Patisserie"
    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 class Couche extends Patisserie  {
        protected Patisserie pat;
        protected String nom;
     
        public Couche(Patisserie p) {
            pat = p;
                    }
     
        public String Preparer(){
            String str = pat.preparer();
            return str + nom;       
        }
    }
    Puis une classe "CoucheChocolat" qui étend la classe "Couche" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class CoucheChocolat extends Couche{
        public CoucheChocolat(Patisserie p) {
            super(p);
            this.nom = "\t- Une couche de chocolat.\n";
        }
    }
    Enfin , le code "main"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class PatternDecorator {
     
        public static void main(String[] args) {
           Patisserie pat = new CoucheChocolat(
                             //   new CoucheCaramel(
                                //    new CoucheBiscuit(
                                   //     new CoucheChocolat(
                                            new Gateau());
           System.out.println(pat.preparer());
        }    
    }
    Remarque : pour simplifier j'ai supprimer les classes CoucheCaramel et CoucheBiscuit.

    Donc l'erreur à la compilation est la suivante :
    "error: CoucheChocolat is not abstract and does not override abstract method preparer() in Patisserie
    public class CoucheChocolat extends Couche{"

    Je ne comprends pas cette erreur, alors par avance merci pour votre aide !!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    Salut,

    Dans ta classe couche, tu as ecris une methode "Preparer()" et non "preparer()". Le compileur prend cela comme une nouvelle methode et non l'implementation de ta methode abstract preparer()

    Je te conseille d'utiliser l'annotation @Override pour de telle methode. Ton code deviendra plus facile a analyzer pour toi et tu aurais trouver l'erreur tout seul.

  3. #3
    Membre averti
    Avatar de daohamadou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Burkina Faso

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

    Informations forums :
    Inscription : Novembre 2015
    Messages : 8
    Par défaut Implementation de la méthode
    Le polymorphisme ne peut pas être appliquer sur une méthode abstract.
    C'est mieux d'utiliser les interfaces

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 576
    Par défaut
    Citation Envoyé par daohamadou Voir le message
    Le polymorphisme ne peut pas être appliquer sur une méthode abstract.
    Si... D'autant plus que par définition, une méthode abstract n'est pas capable de servir à quoi que ce soit sans polymorphisme. Du coup tu es en train de dire que le langage Java propose une fonctionnalité (les méthodes abstraites) alors qu'il n'est pas possible que quoi que ce soit puisse être fait avec.

    Citation Envoyé par daohamadou Voir le message
    C'est mieux d'utiliser les interfaces
    C'est mieux d'utiliser ce qu'il faut quand il faut. Là, la personne essaie clairement de tester des choses avec le pattern décorateur. Forcément, les interfaces ne vont pas suffire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Par défaut Class is not abstract and does not override abstract method in superclass
    Bonjour à toutes et à tous,

    merci beaucoup Yonito, pour la correction et l'explication fournis. Maintenant le code fonctionne !! YOUPI !!

    Merci aussi à thelvin et à daohamadou pour leur discussion. Cela me permet aussi de progresser dans mon apprentissage de java.

    Bonne semaine.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2014, 11h16
  2. Erreur compilation "not abstract and does override"
    Par stever50 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 08/03/2012, 10h48
  3. Réponses: 1
    Dernier message: 09/02/2007, 14h59
  4. Réponses: 4
    Dernier message: 18/01/2006, 21h19
  5. [TOMCAT 5.0 - JSP] Load: class XXX not found
    Par Hoegaarden dans le forum Tomcat et TomEE
    Réponses: 12
    Dernier message: 20/10/2005, 09h59

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