web-dev-qa-db-fra.com

Pourquoi une classe ou une interface ne peut-elle pas recevoir de modificateurs d'accès privés ou protégés?

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?

36
ipkiss

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.

54
Michael Myers

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");
        }
    }
}
15
Hunter McMillen

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.

5
Oak Bytes