Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les accès dans les package

Accès à une classe non public d'un pacage

    24 août 2016 à 10:36:58

    Bonjour

    Je suis débutant en java et j'ai le problème suivant:

    J'ai un fichier qui constitue un package et qui contient deux classes (une classe mère et sa classe fille). La classe mère est bien sur public et la classe fille est default. Le fichier porte le nom de la classe mère donc la classe public. Dans un autre fichier, j'ai mis la classe main. Pourquoi dans mon main je n'ai pas accès à la classe fille bien que j'ai importer tout le package. J'obtiens l'erreur de compilation suivante:

    "Daughter is not public in Equa; cannot be accessed from outside package"

    L'une des solutions serait de créer deux fichiers séparés et de mettre la classe fille en public dans son fichier mais cette solution me parait peut esthétique car je veux qu la classe fille soit dans le même fichier que la classe mère

    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2016 à 10:47:29

      Quand tu ne précise pas la visibilité d'une class elle est mis en visibilité package, c'est à dire quel n'est visible que par les class du même package.

      Si tu n'a pas peur de l'anglais: https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

      • Partager sur Facebook
      • Partager sur Twitter
        24 août 2016 à 11:33:46

        Bonjour et merci de ta réponse florent m.

        Si je change l'accessabilité de ma sous-classe en public, java me dit que je dois créer un autre fichier .java portant le nom de la sous-classe qui est devenu public ce que je cherche à éviter car je veux garder ma classe mère et classe fille dans le même fichier .java.

        D'un autre coté si je change l’accessibilité de ma sous-classe en protected, ça généré une erreur, un truc du genre "j'ai pas le droit d'utiliser un protected à cet endroit".

        Par élimination, je conclue que je peux pas faire ce que je voulais faire. C'est bien ça??

        C'est quand même relou je vais tout de même pas créer un autre fichier pour une sous-classe pour y accéder dans le main??? Est-ce-que c'est une contrainte java????

        • Partager sur Facebook
        • Partager sur Twitter
          24 août 2016 à 11:35:36

          Cechandessien a écrit:

          Bonjour et merci de ta réponse florent m.

          Si je change l'accessabilité de ma sous-classe en public, java me dit que je dois créer un autre fichier .java portant le nom de la sous-classe qui est devenu public ce que je cherche à éviter car je veux garder ma classe mère et classe fille dans le même fichier .java.

          D'un autre coté si je change l’accessibilité de ma sous-classe en protected, ça généré une erreur, un truc du genre "j'ai pas le droit d'utiliser un protected à cet endroit".

          Par élimination, je conclue que je peux pas faire ce que je voulais faire. C'est bien ça??

          C'est quand même relou je vais tout de même pas créer un autre fichier pour une sous-classe pour y accéder dans le main??? Est-ce-que c'est une contrainte java????

          En java un fichier = une Class (sauf cas spécifique)

          Peux tu me montrer le code que tu essaye de faire fonctionner?

          Je pense avoir compris un peu de travers ce que tu essaye de faire. 

          -
          Edité par florent m 24 août 2016 à 11:36:18

          • Partager sur Facebook
          • Partager sur Twitter
            24 août 2016 à 11:50:25

            Merci. Je fais ça ce soir en rentrant du boulot
            • Partager sur Facebook
            • Partager sur Twitter
              25 août 2016 à 21:13:08

              Bonjour

              La structure est la suivante: J'ai un créer un package "Equa" (avec le dossier associé biensur) qui contient un fichier Equation.java (classe mère public "Equation" et classe fille "Daughter" default. Dans le répertoire que le dossier Equa, j'ai mon main myProg.java

              ==================================================

              package Equa;

              public class Equation {

              // Les champs et méthodes de la classe (Résolution d'une equation du second degrée

              }

              class Daughter extends Equation{

              // J'ai créer une méthode void supplémentaire juste histoire de tester l'aspect l'héritage de la POO "fille.return_somme()"

              }

              ========================================================

              import Equa.*;

              class myProg {
              public static void main (String[] args){
                  Equation[] systeme = new Equation[3];
                  systeme[0]=new Equation(1.0,5.0,1.0);
                  systeme[1]=new Equation(1.0,-4.0);
                  systeme[2]=new Equation(0.0,1.0,-4.0);
                  for (int i=0;i<=2;i++){
                      systeme[i].affichEquation();
                      systeme[i].resolution();
                      systeme[i].affichage();
                  }
                  Equation fille = new Daughter();
                  fille.return_somme();

              }

              //end
              }

              =======================================

              Le problème vient bien sur des deux dernières lignes du programme principale

              • Partager sur Facebook
              • Partager sur Twitter
                26 août 2016 à 8:43:09

                Dans se cas là je te conseil de faire un fichier par class, de plus si tu veux utiliser Daughter dans une class qui n'est pas dans le même package tu est obligé de la mettre en public.

                Finalement fille doit forcément être typer en Daughter (actuellement tu instancie un object de type Daughter mais tu down-cast en Equation), sinon tu n'auras pas accès au method de Daughter mais uniquement celle de Equation.

                • Partager sur Facebook
                • Partager sur Twitter

                Les accès dans les package

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown