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

Java Discussion :

héritage d'une classe pas dans le meme package


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut héritage d'une classe pas dans le meme package
    bonsoir tout le monde
    j'ai un probleme qui s'agit de définir une classe B (contenu dans un package PB) qui doit hériter d'une classe A (contenu dans un package PA).

    package A;
    class A {..}

    package B;
    class B extends PA.A {...}

    il detecte des erreurs dans la classe B dans les variables hérité de la classe A("the field A is not visible").

    est ce que quelqu'un peut m'aider???
    merci d'avance

  2. #2
    Membre actif Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 239
    Points
    239
    Par défaut
    Salut,

    Il faut que ta classe A soit déclaré public pour que ton héritage fonctionne.

    A+
    Hydraland

  3. #3
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    Oui je rejoins l'avis d'Hydraland. Si tu ne spécifies pas la visibilité de ta classe (private,public...), ce sont seulement les autres ressources du package qui pourront voir ta classe.
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut
    oué je l'ai affiché public mais pourtant ça ne fonctionne pas lorsqu'elle ne sont pas dans la meme package!!
    Avez vous une autre solution pour ce probleme???
    mercii

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    B ne peut pas accéder aux données privées de A.
    Il faut passer par des accesseurs ou par l'attribut protected.

  6. #6
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    Tu as bien mis une ligne d'import pour ta classe située dans l'autre package
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    Peut être un problème d'arborescence des fichiers ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    src/
       |-- package_a
       |   `-- classA
       `-- package_b
           `-- classB

  8. #8
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut
    voilà l'arboresence de mes classes:
    package PA;
    public class A {}

    package PB;
    import package PA;
    public class B extends A {}

    mais ça ne marche pas! j'ai essayé
    public class B extends PA.A mais ça ne marche pas aussi!!!

  9. #9
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Et sinon : quel est le problème ???
    Parce qu'à part "ca marche pas" on ne sait pas grand chose


    a++

    PS : Et si possible avec du vrai code Java et non pas du simili-code

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    Avoir une VRAIE arborescence fichiers aussi.

    Parce que :

    package PA;
    public class A {}

    package PB;
    import package PA;
    public class B extends A {}
    c'est pas en rapport avec le système de fichier.

    Un message d'erreur pourrait également servir à définir la source du problème.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut
    wi vous avez raison voilà le code:
    j'ai un package "connexion" dont je met:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public class ConnexionBd
    {
    //cntient les drievers et la connexion à la base de données
    }
     
    j'ai un autre package "operations" qui contiens les class décrivant les opérations sur la base de données, j'ai donc la classe suivante:
     
    public class Affichage extends ConnexionBd
    {
    ResultSet res;
    Statement stmt;
     
    public Affichage(String drivers, String url, String user, String pass)
    {
    super(drivers,url,user,pass);
    }
     
    public boolean ReqAff(String req)
    {
    try
    {
    this.stmt = this.con.createStatement();
    this.res = this.stmt.executeQuery("MaRequete");
    }
    catch(SQLException ex)
    {
    System.err.println("==>SQL Exception :\n");
    while(ex!=null)
    {
    System.out.println("Message: "+ ex.getMessage());
    System.out.println("SQLState: "+ ex.getSQLState());
    System.out.println("ErrorCode: "+ ex.getErrorCode());
    ex = ex.getNextException();
    System.out.println("");
    return false;
    }
    }
    return true;
     
    }
     
    }
    Alors Dans la class ReqAff, au niveau de TRY, l'errer suivante:
    "the field ConnexionBd.con is not visible"
    y a t-il une solution???

  12. #12
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    La propriété con de ta classe ConnexionBd doit être privée.
    DOnc soit tu la passes en protected, soit tu fais appel à son getter.

  13. #13
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut
    et comment ça????

  14. #14
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ben tu ouvres ta classe ConnexionBd et tu passes ta propriété con de private à protected.
    Ou alors dans ta sous-classe tu appelles ta méthode getCon() si elle existe, sinon tu la crées dans ConnexionBd.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    Je ne comprends pas trop ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Affichage extends ConnexionBd
    {
    ResultSet res;
    Statement stmt;
    Si tu surcharges le resultset et le statement de ConnexionBd il y a fort à parier que tu vas te ramasser un "NullPointerException". Parce que dans le code tel qu'il est là, il ne sont pas initialisés (ou alors j'ai mal vu).

    Autre remarque, si dans ConnexionBd tu as définis les Statement et autres comme dans Affichage, tu ne les as donc pas préfixé d'un mot clé permettant de changer leur visibilité.
    Par défaut, quand tu ne mets rien, les attributs sont accéssibles quand on est dans le même package. Ce qui expliquerait que tu aies pu y avoir accès lorsque tu étais dans un même package.

    Dans ConnexionBd tu devrais avoir ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class ConnexionBd {
        protected Connexion con;
        // ... le reste
    }

Discussions similaires

  1. Appeler une classe située dans un meme projet
    Par clouddd dans le forum C#
    Réponses: 8
    Dernier message: 17/02/2010, 13h57
  2. Réponses: 6
    Dernier message: 30/03/2009, 18h13
  3. VBO dans une class : pas d'affichage
    Par Naelhem dans le forum OpenGL
    Réponses: 1
    Dernier message: 23/09/2008, 15h09
  4. Réponses: 0
    Dernier message: 10/04/2008, 22h37
  5. Réponses: 2
    Dernier message: 05/10/2007, 10h04

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