J'ai vu quelques références faire référence à un modificateur d'accès en Java appelé private protected
(les deux mots ensemble):
private protected someMethod() {
}
L'une des pages que j'ai trouvées à ce sujet se trouve ici . Ma leçon scolaire faisait également référence à ce modificateur d'accès (et disait qu'il existe). Cependant, son utilisation entraîne une erreur dans le langage Java.
J'ai essayé avec des variables et des méthodes et je suis à peu près sûr que cela n'existe pas, mais je veux une explication de ce qui s'est passé. A-t-il été envisagé, puis rejeté? Ou a-t-il été supprimé dans une version plus récente de Java?
Edit: Je ne cherche pas d'informations sur le protected
mot - clé.
private protected
modificateur combiné .private protected
dans cette réponse, mais cela n'explique pas pourquoi ni ce qui lui est arrivé, de quoi parle cette question.Réponses:
Suppression du modificateur d'accès
Java avait à l'origine le
private protected
modificateur, mais il a été supprimé dans JDK 1.0.2 (la première version stable , le Java 1.0 que nous connaissons aujourd'hui). Quelques tutoriels concernant JDK 1.0.2 ( ici et ici ) disent ce qui suit:Une autre réponse sur SoftwareEngineering.SE déclare:
Jetez maintenant un œil à l' historique des versions de Java :
De là, nous pouvons conclure que les tutoriels concernant la version 1.0.2 font référence à la toute première version, JDK 1.0, où le langage s'appelait Oak, mais celui de SoftwareEngineering.SE se réfère à la première version stable, JDK 1.0.2 appelée Java 1.0, où il a été supprimé.
Maintenant, si vous essayez de le rechercher dans la documentation Java 1.0 , vous ne le trouverez pas, car comme mentionné précédemment, il a été supprimé dans JDK 1.0.2, autrement connu sous le nom de Java 1.0. Ceci est prouvé à nouveau lorsque vous regardez les heures de «Dernière modification» pour le lien que vous avez publié. Le lien que vous avez publié a été modifié pour la dernière fois en février 1996. Java 1.0 / JDK 1.0.2, lorsqu'il a
private protected
été supprimé, a été publié après février 1996 et, selon les spécifications, en août 1996.Raison de la suppression
Certaines sources expliquent également la raison
private protected
, comme celle- ci. Citer:Et le SoftwareEngineering.SE soutient également cela, en disant que cela ne valait pas la peine des incohérences et de la complexité supplémentaire, donc il a été supprimé très tôt.
Interprétation
Mon interprétation de tout cela est que peut-être, à l'époque du chêne, les deux étaient autorisés à coexister (d'où la combinaison). Étant donné que
protected
le sens de ce terme avait changé 1 , il a peut-être été nécessaire de permettreprivate
etprotected
en même temps. L'introduction est devenue trop complexe et n'en valait pas la peine, et a donc été abandonnée à la fin. Au moment où Java 1.0 / JDK 1.0.2 a été déployé, il avait été abandonné et ne peut donc pas être trouvé dans la documentation.1 Dans la spécification du langage Oak , Section 4.10, Accès aux variables et méthodes , il est noté que le modificateur par défaut était
protected
:C'est assez différent de ce que nous avons aujourd'hui, l'accès par défaut aux packages. Cela a peut-être ouvert la voie à la nécessité de
private protected
, car ilprivate
était trop restrictif etprotected
trop indulgent.la source
Early on, the Java language allowed for certain combinations of modifiers,
Cela signifie-t-il qu'il y avait plus que simplement "Protégé privé"?Il y a des histoires déroutantes / peu claires:
L'un, de la source de Princeton que vous avez indiquée, ainsi que des archives du MIT , déclare que:
Mais cette fonctionnalité n'est spécifiée sur aucune documentation officielle de Java 1.0 ici ou ici .
Je suppose que cette fonctionnalité n'a pas atteint la version officielle 1.0, car la spécification de la langue officielle date d'août 1996 et la source de Princeton a été modifiée pour la dernière fois en février 1996 .
PS: dommage à Oracle d'avoir supprimé les archives des anciennes versions.
la source
Comme le lien que vous avez fourni dans votre question le suggère, a
private protected
été utilisé sur uneelement/member
classe, lorsque vous voulezsubclass
pouvoir accéder à l'élément tout en le gardant caché des autres classes de sonpackage
.Java
si comparé àC++
a un concept supplémentaire d'éléments d'encapsulation - et c'est un package . Il faut également comprendre ce qui est accessible à l'intérieur ou à l'extérieur d'un packageJava
lorsqu'il s'agit de ces spécificateurs d'accès commeprivate
,public
&protected
.Veuillez noter que j'ai expliqué pourquoi il a été utilisé. Pas dans la version actuelle bien sûr
la source
Non, vous ne pouvez pas utiliser à la fois
private
unprotected
ensemble. Votre tutoriel est étrange. Ce que vous avez, c'est ce qu'on appelle le package private ou dans ot6 references package protected access. Il s'agit d'un accès par défaut qui est activé lorsqu'aucun qualificatif acc6 n'est écrit explicitement.la source
L'étendue privée est avec la classe existante. Wherein Protected peut être accès dans le package et la classe étendue par des classes dans d'autres packages.
De manière transparente si vous voulez que votre variable / méthodes soit accessible en dehors du package, vous devez définir comme protégé / public sinon privé ou d'autres spécificateurs d'accès.
Les méthodes protégées sont généralement accessibles depuis l'extérieur du package et dans les sous-classes, c'est-à-dire qu'une classe doit étendre la classe respective pour bénéficier des méthodes définies protégées.
Les méthodes / variables privées ont une portée dans la classe et ne peuvent pas être accessibles en dehors de la classe.
Par conséquent, vous ne pouvez pas définir Private Protected en même temps!
la source