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 :

méthode protected non reconnue


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    hug
    hug est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut méthode protected non reconnue
    bonjour,

    voilà mon soucis, j'ai une méthode de classe déclarée "protected" dans un certain package, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    package monpackage.test1;
     
    public abstract class Test1 {
     
    	protected abstract void fonction();
     
    }
    j'ai une autre classe qui hérite de la première et qui rédéfinit la méthode "fonction()" par décoration dans le même package, 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
     
    package monpackage.test1;
     
    public class Test2 extends Test1 {
     
    	private Test1 t;
     
    	@Override
    	protected void fonction() {
    		t.fonction(); // pas de problème
    	}
     
    }
    jusque là pas de problème.
    maintenant, j'ai exactement la même chose, (i.e. une autre classe qui hérite de la première et qui rédéfinit la méthode "fonction()" par décoration) mais cette fois-ci dans un autre package, 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
     
    package monpackage.test2;
     
    import monpackage.test1.Test1;
     
    public class Test3 extends Test1 {
     
    	private Test1 t;
     
    	@Override
    	protected void fonction() {
    		t.fonction(); // ici, problème, eclipse me propose de redéfinir la 
                                     // méthode avec visibilité "protected" ???
    	}
     
    }
    voilà le soucis, ce n'est pas de redéfinir la méthode "fonction()" dans cette sous-classe mais de faire un appel à la même méthode "fonction()" de mon attribut t.

    je ne sais pas si c'est une mauvaise manip ?
    un bug eclipse ? j'utilise la version Helios

    merci pour vos lumières,
    Hugues

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est tout à fait normal !
    Le fait d'hériter de Test1 ne permet de voir que la méthode fonction() Test3 hérité de Test1, mais pas d'appeler directement la méthode fonction() d'une instance de Test1.

    En clair :
    • Tu peux appeler/redéfinir function() sur une instance de Test3 grâce à l'héritage.
    • Tu ne peux pas appeler function() sur une instance de Test1 car c'est une méthode protected.



    a++

  3. #3
    hug
    hug est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut
    merci adiGuba pour ta réponse très claire.

    je trouve, par contre, que JAVA n'est pas très clair sur ce coup là...
    il est souvent dit que qu'une méthode protected est visible depuis ces classes filles, or tu me dis ici qu'elle n'est visible que pour surcharge ou appel hérité --> super.fonction() (si celle-ci n'est pas abstraite) !!!

    et que je ne peux pas faire un appel associé --> t.fonction(); // marche pas

    en fait, pour une classe fille en dehors du package, l'association vers une classe mère est considérée exactement comme une association depuis une classe cliente classique... (sûrement pour éviter des failles de sécurité)

    on en apprend tous les jours.

    encore merci grand maître es JAVA.

    Hugues

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hug Voir le message
    je trouve, par contre, que JAVA n'est pas très clair sur ce coup là...
    il est souvent dit que qu'une méthode protected est visible depuis ces classes filles, or tu me dis ici qu'elle n'est visible que pour surcharge ou appel hérité --> super.fonction() (si celle-ci n'est pas abstraite) !!!
    Les spécifications du langages sont très claires

    Après il y a souvent des raccourcis facile en effet...

    Lorsque tu hérites d'une classes, tu hérites des méthodes "visibles" (donc public, protected puisque tu hérites, et "package" seulement si tu es dans le même package), que tu peux utiliser sur toutes les instances déclarées du même type.

    Lorsque tu manipules une instance d'un autre type, tu peux utiliser les méthodes "visibles" (donc public, et protected/"package" seulement si tu es dans le même package). Le fait que tu hérites ou non de cette classe n'a aucune importance ici...


    a++

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/04/2014, 08h36
  2. Méthode getPart non reconnue
    Par momjunior dans le forum Développement Web en Java
    Réponses: 10
    Dernier message: 11/10/2013, 11h07
  3. [WB15] protection non reconnue
    Par adripc dans le forum WebDev
    Réponses: 4
    Dernier message: 09/11/2010, 19h48
  4. [EJB] [JSP] Méthode EJB non reconnue dans jsp
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/07/2004, 09h52

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