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 :

Restreindre la visibilité d'une méthode


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2002
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 58
    Par défaut Restreindre la visibilité d'une méthode
    Bonjour,

    Je voudrais pouvoir restreindre la visibilité d'une méthode, de protected vers private, mais Java le refuse. Existe t-il une astuce pour y remedier ?

    Exemple de ce que je voudrais:
    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
    public abstract class A {
       protected void a() {
          // ...
       }
    }
     
    public abstract class B extends A {
       protected void b() {
          // ...
          a.();
       }
    }
     
    public class C extends B {
       public void c() {
           // ...
           b.();
       }
    }
    La méthode a() est une méthode utilitaire pour la classe B mais ne doit pas etre utilisé par la classe C. C doit utilisé la méthode utilitaire b(). Comment masquer la méthode a() au niveau de la classe C ?

    merci.

    --
    Bicnic.

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    très simple, dans ta classe C tu réécris la methode a() afin qu'elle appelle la methode b()
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre averti
    Inscrit en
    Juillet 2002
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 58
    Par défaut
    Citation Envoyé par le y@m's
    très simple, dans ta classe C tu réécris la methode a() afin qu'elle appelle la methode b()
    Ce n'est pas ce problème. Je me suis peut être pas bien exprimé.
    En fait, la classe C ne doit pas voir la méthode a(), et ne pas la surcharger non plus ou la réécrire. Seule la méthode b() doit être visible pour C.

    La méthode a() doit être visible uniquement pour la classe B.

    En d'autre terme, la classe B ajoute une valeur ajouté à la méthode a(), ce qui devient la méthode b(). Mais il ne faut pas que la classe C puisse utiliser directement la méthode a(). Elle doit impérativement utiliser la méthode b(). Afin de m'en assurer, je voudrais que la méthode a() soit inaccessible via la classe C

    --
    Bicnic.

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Dans ce cas, comme t'as dit ®om, ce n'est pas possible.
    Mais je ne vois pas l'intéret de faire des méthodes différentes. Tu réécris la methode a() dans ta classe B (afin d'y apporter la valeur ajoutée) comme ça, un objet de classe A utilise la méthode a() de la classe A, un objet de la classe B utilise la méthode a() de la casse B (puisque tu l'as réécris) et enfin un objet de la classe C utilise la methode a() de la classe B.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par Bicnic
    Ce n'est pas ce problème. Je me suis peut être pas bien exprimé.
    En fait, la classe C ne doit pas voir la méthode a(), et ne pas la surcharger non plus ou la réécrire. Seule la méthode b() doit être visible pour C.

    La méthode a() doit être visible uniquement pour la classe B.

    En d'autre terme, la classe B ajoute une valeur ajouté à la méthode a(), ce qui devient la méthode b(). Mais il ne faut pas que la classe C puisse utiliser directement la méthode a(). Elle doit impérativement utiliser la méthode b(). Afin de m'en assurer, je voudrais que la méthode a() soit inaccessible via la classe C

    --
    Bicnic.
    Comme on te l'a déjà dit, ce n'est pas possible.

    Pour moi, ton problème montre une mauvaise définition de la hiérarchie de tes classes.

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Bicnic
    Je voudrais pouvoir restreindre la visibilité d'une méthode, de protected vers private, mais Java le refuse. Existe t-il une astuce pour y remedier ?
    Tu ne peux pas...
    C'est logique, tu peux avoir comme type apparent A et comme type réel C...
    Et tu peux appliquer toutes les méthodes du type apparent (par définition)...

Discussions similaires

  1. visibilité d'une méthode
    Par guti11 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 08/07/2013, 12h46
  2. Visibilité de la méthode d'une classe
    Par alicia26 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/05/2007, 13h46
  3. Réponses: 3
    Dernier message: 16/04/2004, 16h51
  4. une méthode qui écrit dans la sortie html ?
    Par iubito dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 03/12/2003, 15h34
  5. [ActiveX] Visibilité d'une propriété
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/11/2002, 18h33

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