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 :

Netbeans warning sur classe abstraite


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Netbeans warning sur classe abstraite
    Bonjour à tous,

    Voici mon souci.

    J'ai crée une classe abstraite contenant 2 methodes abstraites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public abstract class A extends B
    {
        this.method1();
        this.method2();
    }
     
    public abstract void method1();
    public abstract void method2();
    Le souci, c'est que Netbeans me signale ceci :
    -Make the class A final
    -Make the method method1 "final" ou "static" ou "private"
    -(Même chose pour method2)

    Et je ne comprends pas pourquoi il me propose ces corrections.
    Je ne veux pas mettre ma classe final, de même pour les méthodes (si je l'ai mise abstraite, c'est pour être dérivable)
    Static, je ne vois pas l'intérêt.
    Private, c'est incompatible avec une méthode abstraite non ?

    Merci

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Salut,

    c'est ca le code que tu as mis dans ta classe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public abstract class A extends B
    {
        this.method1();
        this.method2();
    }
     
    public abstract void method1();
    public abstract void method2();
    ??

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Euh non pardon merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public abstract class A extends B {
     
    public A()
    {
        this.method1();
        this.method2();
    }
     
    public abstract void method1();
    public abstract void method2();
    }
    Je sens que j'ai fait un truc minable dans le code

  4. #4
    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 ne sont pas des erreurs de compilation. Netbeans te donne ces conseils, parce que cette construction est un nid à bugs.

    J'explique : ces méthodes sont appelées dans le constructeur de ta classe abstraite. Ce constructeur va donc être appelé au début des constructeurs de ses classes filles. Et il va donc appeler l'implémentation de ces méthodes par ces classes filles, avant que leur initialisation ne commence. Tu avais réalisé ça ? La plupart ne le font pas, et de toute façon ça se voit pas tout de suite.
    En général, les erreurs arrivent là.

    Si ces méthodes n'étaient ni abstraites, ni redéfinissables (si elles étaient final, donc,) alors le problème n'existerait pas. D'où le conseil donné.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Ok merci je comprends.
    Je me suis d'ailleurs taper un nullpointerexception après le lancement.
    Dès que je les retire de la classe, ça fonctionne.
    Le truc qui me chagrine, c'est que pour chacune des filles, j'appelle ces méthodes à leur construction.
    Vu comme je compte faire plusieurs méthodes en appliquant ce même mécanisme, c'est la raison pour laquelle je souhaite faire ceci dans la mère.
    Vous avez une alternative à me proposez ?

  6. #6
    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 helpy2 Voir le message
    Le truc qui me chagrine, c'est que pour chacune des filles, j'appelle ces méthodes à leur construction.
    Vu comme je compte faire plusieurs méthodes en appliquant ce même mécanisme, c'est la raison pour laquelle je souhaite faire ceci dans la mère.
    Vous avez une alternative à me proposez ?
    Fais qu'il n'y ait qu'une seule méthode à appeler dans le constructeur des classes filles. Cette méthode-là peut être implémentée dans la classe abstraite, puisque c'est pareil pour toutes, et reposer sur l'appel de méthodes abstraites.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Fais qu'il n'y ait qu'une seule méthode à appeler dans le constructeur des classes filles. Cette méthode-là peut être implémentée dans la classe abstraite, puisque c'est pareil pour toutes, et reposer sur l'appel de méthodes abstraites.
    Ah oué bonne idée !
    Mais ça reste une méthode dissimulée si tu vois ce que je veux dire.
    Ca cache le warning, mais ça ne résout pas le problème.
    Donc si j'ai bien compris je n'ai pas le choix non ?

  8. #8
    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 helpy2 Voir le message
    Ca cache le warning, mais ça ne résout pas le problème.
    Ben si. Réfléchis. Le problème de base était qu'on appelait methode1() et methode2() des classes filles avant leur initialisation. Là le principe est de le faire à l'intérieur de leur propre constructeur, donc après les initialisations et de préférence à un moment où tout est prêt. Problème réglé, donc.

    Il reste deux problèmes, c'est vrai :
    - c'est qu'en principe toutes les classes filles ont besoin d'appeler cette méthode dans leur constructeur et qu'on ne peut rien faire pour imposer à une classe fille de le faire, il faut y penser chaque fois qu'on écrit un nouveau constructeur d'une de ces classes filles.
    - Les classes petite-filles : ce n'est pas faisable. Dès qu'une classe fille doit avoir elle-même des classes filles, il faut lui déclarer les méthodes en question final, ou alors refaire la même astuce avec elle.
    Mais ce sont d'autres problèmes, et je les trouve moins graves.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci, c'est parfait, j'ai tout compris !
    Je vous remercie à tous pour votre aide

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

Discussions similaires

  1. Probleme sur classe abstraite argument non reconu
    Par Nono Sto dans le forum Débuter
    Réponses: 4
    Dernier message: 07/02/2011, 18h50
  2. [Conception] Héritage sur Plusieurs classes abstraites
    Par facilus68 dans le forum Langage
    Réponses: 9
    Dernier message: 20/03/2009, 13h06
  3. POO : besoin de confirmation sur classe abstraite
    Par loic20h28 dans le forum Design Patterns
    Réponses: 8
    Dernier message: 20/01/2009, 08h43
  4. [EJB3 Entity] manytomany sur classe abstraite
    Par maibey dans le forum Java EE
    Réponses: 2
    Dernier message: 17/01/2009, 14h14
  5. pb héritage sur classe abstraite et iterator
    Par black-falco dans le forum C++
    Réponses: 21
    Dernier message: 05/01/2008, 16h38

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