2010-03-17 3 views

Répondre

5

Vous pouvez pouvez déclarer une classe protégée ou même privée - mais seulement dans une autre. À ce moment-là, il est soit visible pour les classes dérivées de l'externe (dans le cas de la protection) ou non (dans le cas de privé):

public class Outer 
{ 
    private static class NotVisibleToSubclassesOfOuter {} 

    protected static class VisibleToSubclassesOfOuter {} 
} 
+0

La même chose est également réelle pour les interfaces. – Roman

+0

Pouvez-vous le rendre un peu plus clair pour l'interface? S'il vous plaît utiliser des exemples le cas échéant –

0

Que signifie une classe privée? Qu'il ne peut pas être utilisé en dehors de cette classe? Pourquoi auriez-vous déjà eu une telle classe? (Comment l'exécuteriez-vous/le testeriez-vous?)

Que signifierait une classe protégée? Cela ne peut être vu que par les classes qui l'étendent. Ainsi quand vous tapez un squelette de classe (certains où hors du monde) il n'est pas visible mais quand nous disons s'étend la classe dynamiquement devient visible?

La classe protégée par paquet a du sens - Elle est visible par les classes à l'intérieur du paquet et pas vraiment pour la consommation publique.

+1

Il existe une raison derrière la classe privée. Vous voulez avoir une classe utilitaire qui est utilisée dans votre bibliothèque, mais vous ne voulez pas la rendre publique. Mais puisque javac crée un fichier .java par classe, c'est un peu inutile. – Andrey

+0

@Andrey a alors cette classe comme une classe privée à la classe qui l'utilise :) Pas un séparé d'une classe privée :) L'OP demandait pourquoi les classes n'ont pas le modificateur privé. Ils n'ont pas en Java car il est logique de ne pas les avoir :) –

+0

oui, et je suis d'accord. mais je voulais mentionner que le modificateur privé de la classe est inutile juste en Java, pas lui-même. en C# il y a un modificateur privé pour la classe et c'est très significatif là-bas. – Andrey

0

Il n'y a pas de sens à avoir spécificateurs accès privé ou protégées pour la classe ou interface parce que ces deux ont plus de sens quand il s'agit de variables ou de méthodes pour réaliser l'encapsulation des données.

+1

Les deux ont un sens lorsque le type en question est un type imbriqué, cependant. Voir ma réponse pour un exemple. –

0

Il n'existe pas de spécificateur d'accès en Java. Le terme est "modificateur d'accès".

(Donc toutes ces questions d'entrevue que vous voyez demandant quelle est la différence sont des absurdités.)

Questions connexes