Je lis quelque chose Java texte et le texte indique que nous ne pouvons appliquer que public
ou default
modificateur d'accès pour la classe et l'interface. Par conséquent, il s'agit d'une compilation erreur si nous déclarons:
private class A {}
ou
protected class A{}
Je suis juste curieux pourquoi une classe ou une interface ne peut pas recevoir private
ou protected
modificateurs d'accès?
private
signifie "uniquement visible dans la classe enfermante".
protected
signifie "uniquement visible dans la classe enfermante et les sous-classes, ainsi que n'importe où dans le package de la classe enfermante".
private
, donc, n'a donc aucune signification lorsqu'il est appliqué à une classe de niveau supérieur; Il en va de même pour la première partie de la définition de protected
. La deuxième partie de protected
-pourrait Appliquer, mais elle est couverte par le modificateur par défaut (protégé contre le paquet), alors protected
fait partie de la signification et une partie redondante.
Les deux private
et protected
peuvent être (et sont fréquemment) appliqués à des classes et des interfaces imbriquées, mais jamais des classes et des interfaces de haut niveau.
les classes de haut niveau ne peuvent avoir que public
ou default
accès, mais les classes internes peuvent avoir private access
:
public class TestClassAccess
{
public static void main(String[] args)
{
new TestClassAccess().new TestClassPrivateAccess();
}
private class TestClassPrivateAccess
{
TestClassPrivateAccess()
{
System.out.println("I'm a private class");
}
}
}
Il n'y a que deux cas d'utilisation pour la visibilité de la classe au niveau supérieur (A) visible partout (B) visible uniquement dans l'emballage. Seulement deux modificateurs (public
et par défaut). Si la classe est public
, alors il est visible pour toutes les classes. S'il n'y a pas de modificateur d'accès, il n'est visible que pour les classes dans le même paquet.
Avait-il eu plus de cas d'utilisation pour la visibilité de la classe au niveau supérieur, Java Language aurait fourni plus de modificateurs.