160 votes

Java dispose-t-il d'un modificateur d'accès "privé protégé"?

J'ai vu quelques références se rapportent à un modificateur d'accès en Java appelés private protected (les deux mots ensemble):

private protected someMethod() {

}

L'une des pages que j'ai trouvé est ici. Ma leçon d'école est également référé à ce modificateur d'accès (et a dit qu'il en existe un). En l'utilisant, cependant, conduit à une erreur dans le langage Java.

J'ai essayé avec les deux variables et de méthodes, et je suis sûr que ça n'existe pas, mais je veux une explication de ce qui s'est passé. Était-il, avant de le rejeter? Ou ont-ils supprimé dans une version plus récente de Java?

Edit: je ne suis pas à la recherche d'informations sur l' protected mot-clé.

191voto

Li357 Points 31390

Retrait du modificateur d'accès

Java n'ont, à l'origine de l' private protected modificateur, mais il a été supprimé dans le JDK 1.0.2 (la première stable version, Java 1.0 que nous connaissons aujourd'hui). Quelques tutoriels concernant JDK 1.0.2 (ici et ici) dire ce qui suit:

Remarque: La version 1.0 du langage Java pris en charge cinq niveaux d'accès: les quatre énumérées ci-dessus ainsi private protected. L' private protected niveau d'accès n'est pas pris en charge dans les versions de Java supérieur à 1.0; vous devez ne plus utiliser dans vos programmes Java.

Une autre réponse sur SoftwareEngineering.SE membres:

Java avait à l'origine d'une telle modification. Il a été écrit private protected mais supprimé en Java 1.0.

Maintenant, jetez un oeil à la Version Java de l'Histoire:

JDK 1.0

La première version a été publiée le 23 janvier 1996 et a appelé le Chêne. La première version stable, JDK 1.0.2, est appelé Java 1.

À partir de cela, nous pouvons conclure que des tutoriels concernant la version 1.0.2 reportez-vous à la première version du JDK 1.0, où la langue a été appelé le Chêne, mais l'un de SoftwareEngineering.SE réfère à la première version stable, JDK 1.0.2 appelé Java 1.0, où il a été enlevé.

Maintenant, si vous essayez de faire une recherche dans le Java 1.0 documentation, vous ne le trouverez pas, parce que, comme mentionné plus tôt, il a été supprimé dans le JDK 1.0.2, autrement connu sous le nom de Java 1.0. C'est prouvé de nouveau lorsque vous regardez la "Dernière modification" fois pour le lien que vous avez posté. Le lien que vous avez posté a été modifiée en février 1996. Java 1.0/JDK 1.0.2, lorsqu' private protected a été supprimé, a été libéré après février 1996, et selon les spécifications, août 1996.

La raison du retrait

Certaines sources expliquent également la raison pour private protected, comme cela . Pour citer:

Ce qui a été privé protégé?

Dès le début, le langage Java a permis pour certaines combinaisons de touches, dont l'une a été private protected. Le sens de l' private protected a été à la limite de la visibilité strictement aux sous-classes (et de supprimer le package access). Ce fut par la suite considéré comme un peu incohérente et trop complexe et n'est plus supporté.[5]

[5] Le sens de l' protected modificateur de changé dans la Beta2 version de Java, et l' private protected combinaison est apparu à la même époque. Ils ont corrigé certains potentielles failles de sécurité, mais confondu beaucoup de gens.

Et le SoftwareEngineering.SE prend également en charge ce, en disant que ce n'était pas la peine de les incohérences et supplémentaire de complexité, de sorte qu'il a été supprimé dès le début.

L'interprétation

Mon interprétation de tout cela est que peut-être, de retour dans le Chêne jours, les deux ont été autorisés à coexister (d'où la combinaison). Depuis protecteds'sens avait changé1, il peut y avoir un besoin d'autoriser private et protected dans le même temps. L'introduction est devenu trop complexe et n'était pas la peine, et a donc été abandonné à la fin. Par le temps de Java 1.0/JDK 1.0.2 roulé autour, il avait été abandonné et ne peut donc pas être trouvée dans la documentation.


1Dans le Chêne Spécification du Langage, de l'Article 4.10 de l'Accès à des Variables et des Méthodes, il est à noter que la modification par défaut est protected:

Par défaut, toutes les variables et les méthodes d'une classe sont protégés.

C'est très différent de ce que nous avons aujourd'hui, le défaut d'accès au package. Cela pourrait ouvrir la voie à la nécessité d' private protectedcar private était trop restrictive et, protected a été trop indulgent.

52voto

m0skit0 Points 10269

Il y a confusion/pas clair histoires:

L'un, de la de Princeton source, et aussi de MIT archives, stipule que:

Remarque: La version 1.0 du langage Java pris en charge cinq accès niveaux: les quatre énumérées ci-dessus ainsi protégées privées. Le privé accès protégé par niveau n'est pas pris en charge dans les versions de Java supérieur que 1.0; vous devez ne plus utiliser dans vos programmes Java.

Mais cette fonctionnalité n'est pas spécifié sur toute la documentation officielle de Java 1.0 ici ou ici.

Ma conjecture est que cette fonctionnalité n'a pas été à l'officiel de la version 1.0, puisque la langue officielle est la spécification d'août 1996 et à Princeton source a été modifiée en février 1996.

PS: honte à Oracle pour enlever les archives des anciennes versions.

10voto

Game_Of_Threads Points 1572

Comme le lien que vous avez fourni dans votre question suggère private protected a été utilisé sur un element/member d'une classe, lorsque vous voulez que votre subclass de pouvoir accéder à l'élément, mais le garder caché d'autres classes dans ses package.

Java par rapport à l' C++ a une notion d'encapsulation des éléments - et c'est un Package. Il faut aussi comprendre ce qui est accessible à l'intérieur ou à l'extérieur d'un paquet en Java quand il s'agit de ces accès-prescripteurs comme private, public & protected.

Veuillez noter que je vous ai expliqué pourquoi il a été utilisé. Pas dans la version actuelle de cours

0voto

AlexR Points 60796

Non, vous ne pouvez pas utiliser les deux private a protected ensemble. Votre tutoriel est étrange. Ce que vous avez est ce qu'on appelle un paquet privé ou un accès protégé par un paquet dans les références ot6. C'est l'accès par défaut qui est activé quand aucun qualificatif acc6 n'est écrit explicitement.

-2voto

Tejas Gowda Points 10

Portée privée est à l'intérieur de la classe existante. Où Protégée peut être l'accès à l'intérieur du package et de la classe prolongée par des classes dans d'autres packages.

Parfaitement si vous souhaitez que votre variable/méthodes d'accès à l'extérieur du colis, vous devez définir comme protégé/public autrement privée ou d'autres spécificateurs d'accès.

Protégé méthodes sont généralement accessibles à partir de l'emballage extérieur et à l'intérieur des sous-classes, j'.e une classe doit étendre la classe respective pour bénéficier protégé méthodes définies.

Privé méthodes/variables ont une portée au sein de la classe.Ils ne peuvent pas être accessible à l'extérieur de la classe.

Par conséquent, vous ne pouvez pas définir Privé, Protégé en même temps!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X