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 :

classe déclarée privée


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 957
    Points : 141
    Points
    141
    Par défaut classe déclarée privée
    Bonjour,

    J'aimerais seulement avoir une confirmation sur ce point : d'après la définition dont je dispose déclarer une classe en tant que classe privée( private class) signifie qu'elle n'est accessible qu'à partir du fichier où elle est définie.
    Cela veut il dire que je ne peux créer une instance de cette classe qu'à partir de la méthode main de cette classe et pas d'une autre classe.

    Une classe peut elle être déclarée privée et avoir des variables d'instance publiques, c'est à dire dont on peut changer la valeur depuis d'autres classes?

    Merci beaucoup de votre aide.

    Cordialement.

    Nathalie Harbonne
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Oui tu peux mettre tes variables public mais non elles ne seront pas accessible vu qu'il faut forcément accéder à la classe pour accéder aux variables.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Oui, tu peux, mais ça ne sert à rien.

    Une classe ne peut pas être déclarée privée sauf si c'est une inner classe (classe interne à une autre). Or dans ce cas la classe principale a accès à tous les attributs de l'inner class, même ceux privés. Il n'y a donc aucun intérêt à déclarer une classe privée avec des attributs privés.

  4. #4
    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,



    Déjà une classe de premier niveau ne peut pas être déclarée private car cela n'aurait aucun sens (personne ne pourrait l'utiliser). Une classe ne peut donc être que public ou package-only.


    Par contre les classes internes peuvent très bien être déclaré private ou protected (à l'intérieur d'une autre classe donc), et malgré tout contenir des membres public (afin de respecter une interface par exemple).


    a++

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 957
    Points : 141
    Points
    141
    Par défaut Déclaration classe privée
    Merci de vos réponses.

    Très bien pour l'inutilité de déclarer une classe privée.
    Mais est ce interdit(si on le fait, obtient on une erreur du compilateur?)
    J'aimerais seulement revenir sur ces propos:
    Par contre les classes internes peuvent très bien être déclarées private ou protected (à l'intérieur d'une autre classe donc), et malgré tout contenir des membres public (afin de respecter une interface par exemple).
    Si une classe est déclarée private , même si elle possède des membres public , aucun des membres ne sera accesible.
    Peux tu m'en dire un peu plus à propos de l'interface, comme tu l'as écrit
    afin de respecter une interface par exemple
    Merci bien à toi.

    Cordialement.

    Nathalie
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  6. #6
    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
    Citation Envoyé par harbonne Voir le message
    Très bien pour l'inutilité de déclarer une classe privée.
    Mais est ce interdit(si on le fait, obtient on une erreur du compilateur?)
    Erreur du compilateur : il t'aurait suffit d'essayer pour avoir ta réponse


    Citation Envoyé par harbonne Voir le message
    Si une classe est déclarée private , même si elle possède des membres public , aucun des membres ne sera accesible.
    Peux tu m'en dire un peu plus à propos de l'interface, comme tu l'as écrit
    Un 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
    17
    18
    19
    20
    class MaClasse {
     
    	private String name;
     
    	public MaClasse(String name) {
    		this.name = name;
    	}
     
    	public HelloWorld getTask() {
    		return new HelloWorld();
    	}
     
     
    	private class HelloWorld implements Runnable {
    		@Override
    		public void run() {
    			System.out.println("Hello " + MaClasse.this.name + " !");
    		}
    	}
    }
    La méthode getTask() te renvoi une instance d'une classe privée, mais déclaré en tant que "Runnable". Tu peux donc utiliser sa méthode public hérité run(), mais pas d'éventuelles autres méthodes...


    a++

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 957
    Points : 141
    Points
    141
    Par défaut classe privée et méthodes publiques héritées
    Bonjour et merci beaucoup.

    Est ce la même chose pour une classe privée qui hérite de toutes les méthodes d'une classe publique.

    Merci à toi.

    Cordialement.

    Nathalie
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Oui, à ceci prêt que Adiguba a commis une petite erreur. getTask doit déclarer renvoyer un runnable et non un HelloWorld. La raison en est que, les classes, a l'extérieur, qui voudront utiliser getTask(), seront face à un type de retour (HelloWorld) auquel ils n'ont pas accès et pour lequel il ne connaissent donc pas la hierarchie (message: run() in test.MaClasse.HelloWorld is defined in an inaccessible class or interface)

    Par contre, si tu change juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public HelloWorld getTask() {
    		return new HelloWorld();
    	}
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Runnable getTask() {
    		return new HelloWorld();
    	}
    et que tu retire ce @override plus bas, çà marchera

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/03/2013, 20h12
  2. Réponses: 3
    Dernier message: 22/10/2010, 01h18
  3. Classe entièrement privée
    Par eric_marciano dans le forum Threads & Processus
    Réponses: 22
    Dernier message: 09/05/2009, 15h44
  4. Réponses: 2
    Dernier message: 23/01/2007, 11h57
  5. Classe privée et variables globales
    Par mavina dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 21/04/2006, 16h03

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