Java: Pourquoi pouvons-nous définir une classe de premier niveau comme privée?

Pourquoi Java permet-il de déclarer une classe de niveau supérieur comme privée? Existe-t-il une autre raison que “Nous ne pouvons pas accéder à une classe privée”?

Eh bien, vous ne pouvez pas. Une classe de haut niveau comme privée serait complètement inutile car rien n’y aurait access.

Java ne permet pas à une classe de niveau supérieur d’être privée. Seulement ‘public’ ou ‘package’.

Je crois qu’une meilleure question serait:

Qu’est-ce que cela signifierait pour une classe de haut niveau d’être privée?

Si vous pensez en termes de niveaux d’access, le niveau supérieur à la classe est package. En fait, vous pouvez avoir des classes privées de niveau supérieur en Java! D’après les didacticiels Java d’Oracle (anciennement Sun) :

Si une classe n’a pas de modificateur (valeur par défaut, également appelée package-private), elle est visible uniquement dans son propre package (les packages sont des groupes nommés de classes apparentées – vous en apprendrez plus à ce sujet dans une leçon ultérieure).

Selon la réponse à la question que j’ai posée, cela pourrait correspondre à votre définition d’une «classe privée de premier niveau».

En théorie, vous pouvez instancier et appeler des méthodes sur une classe private premier niveau (si cela était autorisé par le langage … ce qui n’est pas le cas! ), Mais vous devriez utiliser la reflection pour ce faire. Sensiblement (IMO) Sun a décidé que les cours privés de haut niveau n’étaient pas une bonne chose à supporter au niveau linguistique.

En fait, il est possible que la JVM prenne en charge les “classes” privées de haut niveau créées par la magie des bytecodes. Mais ce n’est pas une chose utile à faire.


UPDATE – En fait, la spécification JVM actuelle indique clairement que le bit ACC_PRIVATE du mot des indicateurs d’access à une classe est “réservé à une utilisation future”, et que les implémentations Java doivent le traiter comme non défini. Ainsi, la spéculation ci-dessus est sans object pour toute JVM qui implémente ssortingctement la spécification actuelle.

Les classes privées sont autorisées mais uniquement en tant que classes internes ou nestedes. Si vous avez une classe privée interne ou nestede, alors l’access est limité à la scope de cette classe externe.

Si vous avez une classe privée seule en tant que classe de niveau supérieur, vous ne pouvez pas y accéder depuis n’importe où. Cela n’a donc aucun sens d’avoir une classe privée de premier niveau.

Nous ne pouvons pas déclarer la classe externe comme privée. Plus précisément, nous ne pouvons pas utiliser de spécificateur d’access privé avec une classe externe. Dès que vous essayez d’utiliser un spécificateur d’access privé avec une classe, vous obtiendrez un message dans Eclipse comme une erreur indiquant que seul public, final, abstract peut être utilisé comme modificateur d’access avec class.

Rendre une classe privée n’a aucun sens car nous ne pouvons pas accéder au code de sa classe à l’extérieur.

Il n’y aurait aucun moyen d’accéder à cette classe ou à ses membres.

Cela nécessite une compréhension simple de la raison pour laquelle il n’est pas nécessaire de déclarer les classes comme privées dans Java. Si votre classe est elle-même un programme / logiciel autonome (ce qui est hautement improbable), alors vous l’auriez déjà défini dans un projet et un package spécifique. Donc, l’ajout d’un mot clé privé lui est redondant. Si ce n’est pas le cas, l’access par défaut signifie que votre programme / logiciel dépend de différentes classes à exécuter. Si nous déclarons une classe parmi eux comme privée (au cas où nous le pourrions), nous restreignons son accessibilité par d’autres classes, etc., ce qui est inutile. Cela signifie simplement que la classe déclarée comme privée par nous est inutile pour le code à exécuter. Ce qui le rend encore inutile. Si vous voulez dire un access au niveau du paquet, pour un access par défaut, nous n’avons pas besoin de déclarer un mot-clé avant.

Le modificateur d’access private est le modificateur d’access le plus ressortingctif. Les membres d’une classe définie à l’aide du modificateur d’access private sont accessibles qu’à eux-mêmes. Peu importe si la classe ou l’interface en question provient d’un autre package ou si la classe, private membres private ne sont pas accessibles en dehors de la classe dans laquelle ils sont définis. les membres privés ne sont accessibles qu’aux classes et interfaces dans lesquelles ils sont définis. Alors, quelle est l’utilisation d’ private classe externe private quand elle ne peut être utilisée pour rien? De toute évidence, il ne peut pas être utilisé comme la classe de départ droite? Voir l’image ci-dessous pour plus de détails sur les modificateurs d’access Java.

Modificateurs d'accès Java

Vous ne pouvez pas définir une classe de premier niveau privée (ou autre chose que publique). Vous obtiendrez une erreur de compilation.

 Something.java:6: error: modifier private not allowed here private class Something { ^ 1 error 

Vous n’avez que deux options, public ou aucun modificateur d’access. En omettant publiquement, implicitement, vous limitez l’access aux classes dans le package (aka: package-private).