L'utilisation de modificateurs de visibilité en Java
class Orange{
Orange(){
}
}
Quelle est la différence entre l'utilisation du modificateur - dans ce cas, le colis-privé en face de la classe et en face du constructeur? Je pense que le modificateur devant le constructeur signifie qu'il est autorisé à instancier une instance de la classe Orange
. Mais quel est le modificateur devant la classe?
est valable que java?, vous pouvez lire un article sur les modificateurs dans tout bon livre
il n'est pas.
Vous ne pouvez pas avoir le paquet comme une classe / méthode de modification.
-1 pour demander syntaxe non valide... Cependant, je parie qu'il signifie la visibilité par défaut pour cette.
Ok. Qui a menti à vous tous et a dit que c'était syntaxe non valide?
il n'est pas.
Vous ne pouvez pas avoir le paquet comme une classe / méthode de modification.
-1 pour demander syntaxe non valide... Cependant, je parie qu'il signifie la visibilité par défaut pour cette.
Ok. Qui a menti à vous tous et a dit que c'était syntaxe non valide?
OriginalL'auteur joy | 2013-05-24
Vous devez vous connecter pour publier un commentaire.
Pour commencer il y a 4 niveaux d'accès créé par 3 modificateurs d'accès.
Vous sont corrects sur les modifications au niveau des constructeurs sont directement liées à l'instanciation de la classe.
Modificateurs au niveau de la Classe de décider de l'accessibilité de la Classe.
L'OP parle de modificateurs sur la classe elle-même, et non pas des méthodes.
ok, voici l'affaire. Une classe ne peut être public ou à un défaut je.e vous pouvez uniquement utiliser un modificateur qui est public, au niveau de la classe. Supposons que vous ne spécifiez pas et modificateur d'accès lors de l'écriture de la classe(niveau d'accès par défaut) et tentez d'y accéder dans un autre package, il ne sera pas accessible. L'importation ne seront pas autorisés
OriginalL'auteur Rishikesh Dhokare
Tout d'abord, pour apaiser les craintes, le code que vous avez fourni est parfaitement valide la syntaxe Java.
En effet, vous avez créé une classe qui ne peut être instanciée/utilisé par d'autres classes dans le package par défaut. Il fonctionne également si vous en avez défini un paquet (par exemple,
package foo;
), puisque seulement les classes dans le packagefoo
pu voir cette classe).Maintenant, au cœur de la question.
Il y a différentes façons de contrôler l'accès aux champs et aux membres. et ils font des choses différentes.
private
la visibilité est la moins visible. Seule la définition de la classe peut accéder au champ.Pas de modificateur, ou
package private
est la deuxième moins visible. La classe de définition et toutes les classes dans le package peut accéder au champ, mais les sous-classes et le reste du monde ne le peut pas.protected
est le deuxième plus visible. Seulement les autres classes sont interdit d'accès au terrain.public
est la plus visible. Tout peut accéder au champ.Modificateurs au niveau de la classe. Cela vient de la Java Langage De Spécification, §8.1.1:
En général, une déclaration de classe apparaît quelque chose comme ceci:
N'importe quoi avec (opt) est considéré comme facultatif.
Donc, qu'est-ce rogner?
public
, alors il n'est applicable qu'à haut niveau des classes et des catégories de membres.protected
ouprivate
, alors il est uniquement applicable aux catégories de membres au sein d'une classe englobante ou une énumération.static
modificateur peut apparaître, mais est uniquement applicable aux catégories de membres.Les constructeurs ont une règle similaire ensemble.
Encore une fois, cela revient à:
résumé
,statique
,final
,maternelle
,strictfp
, ousynchronisé
.OriginalL'auteur Makoto
Vous ne pouvez déclarer un public ou à un défaut de la classe (dans le cas de haut niveau des classes uniquement) en Java, et ces modificateurs de décider qu'à l'accessibilité de la classe.
Je vous conseille aussi de voir "Pourquoi pas une classe ou une interface de recevoir privés ou protégés des modificateurs d'accès?"
Maintenant, comme pour tant que constructeur, un constructeur aura aaccess de contrôle de type par défaut quand aucun accès modificateur est définie de manière explicite. Donc, ce constructeur aura un Paquet de Niveau d'Accès. Seuls ceux de la classe qui sont définis à l'intérieur de ce paquet de la classe avec ce constructeur par défaut sera en mesure d'y accéder. Voir "Ne sont pas Java constructeurs public par défaut?"
Si le constructeur est privé, seul le code à l'intérieur de cette classe peut accéder.
Pour une meilleure compréhension des modificateurs, vous avez besoin de voir "Modificateurs D'Accès En Java"
private
, par conséquent, n'a pas de sens lorsqu'il est appliqué à un haut-niveau de la classe. Par ailleurs, vous pouvez l'appliquer à un non haut-niveau de la classe par exemple statique à l'intérieur des classes.Chers À l'OP de l'exemple , il n'a pas montré intérieur de la classe.Donc, je suis juste de répondre dans son futur.De toute façon j'ai édité ma question
Cela ne signifie pas que vous devez fournir des informations incomplètes.
Assurez-vous de ne.
OriginalL'auteur Freak
Modificateur de classe définit qui peut accéder à la classe. Par exemple
public
classe peut être consulté par les classes de n'importe quel paquet, si aucun modificateur n'est écrit de la classe peut être consulté par les classes de la même seulement.Modificateur de constructeur, méthode et champ a la même signification. Cependant
private
etprotected
ont plus de sens. Privé peut être consulté à partir de la classe en cours. Protégé de ses sous-classes aussi loin que de simplement des classes du même package.En ce qui concerne votre question sur constructeur. La classe peut avoir plusieurs constructeurs. Certains d'entre eux peuvent être privés, d'autres publics. Vous avez raison, il n'y a aucun sens à faire de constructeur public si la classe est forfait protégée: non-un emballage extérieur peut appeler cette classe de toute façon.
C'est exactement comme écrit les constructeurs publics pour les classes abstraites. Depuis la classe abstraite ne peut pas être instanciée lui-même ses constructeurs devraient être
protected
ouprivate
bien que le compilateur ne se soucie pas de cela.BTW à l'aide de package par défaut n'est pas couramment utilisé et n'est pas recommandé technique.
OriginalL'auteur AlexR
La utilisation et types de
class
niveau des modificateurs:http://javapapers.com/core-java/access-modifiers-in-java-explain/
La utilisation et types de
constructor
niveau des modificateurs:http://www.careercup.com/question?id=296844#commentThread302715
OriginalL'auteur Ravi Trivedi
Classe modificateurs de travail de même pour la méthode des modificateurs. Public, privé, finale, abstrait, etc. travail.
Public permet à la classe et ses méthodes pour être accessible par les classes de n'importe quel paquet.
Aucun modificateur permet uniquement de classes à l'accès de son package définis.
Privé permettrait d'éviter tous les accès (pas de point pour ce cas d'utilisation avec un haut-niveau de la classe).
Les classes abstraites permettent de créer des enfant classes dérivées de la parent (résumé) de la classe. Par exemple, vous pouvez faire une Forme Abstraite de la classe et ont une classe Rectangle étendre forme, héritant de ses méthodes, variables, et l'obliger à définir toutes les méthodes abstraites.
OriginalL'auteur Aaron
Modificateurs D'Accès:
Non-Modificateurs D'Accès:
Une brève discussion sur le dessus de modificateurs dans ce lien. Vous y référer pour mieux comprendre.
OriginalL'auteur Hariprasath
Je trouve le meilleur niveau de visibilité en Java à l'
default
visibilité, c'est à dire paquet visibilité, car elle permet à l'unité de classes de test pour accéder à toutes les méthodes, si le test est placé dans le même package que la classe principale.Aussi paquet visibilité est plus court à écrire puisque vous pouvez omettre la déclaration de visibilité, donc il y a moins de chaudière plaque.
Le deuxième meilleur niveau de visibilité est
protected
, car dans certains cas, vous pouvez créer vos classes de test comme des sous-classes de votre classe principale. Toutefois, comme indiqué précédemment, le package de visibilité fonctionne mieux dans la plupart des cas, si vous utilisez correctement les paquets.Troisième, en règle générale, si vous exécutez un Sonar et de faire l'examen du code et de l'analyse statique sur de grands projets, j'ai découvert qu'en général, 80% de l'méthodes sont
public
, et 20% sontprivate
/protected
. Ainsi, l'idée principale est d'utiliser des méthodes privées ou protégées est de protéger les données/les propriétés de l'accès en contournant les accesseurs. La plupart de ces méthodes seront généralement public de toute façon.Les plus inutiles niveau de visibilité (mais malheureusement souvent utilisé) est
private
comme il est impossible de tester (sans l'aide de la Réflexion et de la modification de la visibilité à autre chose). Aussi,private
code interdit la réutilisation des sous-classes, ce qui est l'idée principale de l'aide de paradigme orienté objet, en premier lieu, et devrait donc être évitée. Pour les mêmes raisons mot-cléfinal
devrait être évitée dans la plupart des cas.Donc, je trouve votre exemple, à être la meilleure pratique, la manière de définir les niveaux de visibilité, à l'exception que votre constructeur n'est pas public :). Cependant, il vous manque la déclaration du package et les tests unitaires.
OriginalL'auteur PHZ.fi-Pharazon