Ich habe einige Referenzen gesehen, die sich auf einen Zugriffsmodifikator in Java beziehen, der aufgerufen wird private protected
(beide Wörter zusammen):
private protected someMethod() {
}
Eine der Seiten, die ich gefunden habe, ist hier . Meine Schulstunde bezog sich auch auf diesen Zugriffsmodifikator (und sagte, dass er existiert). Die Verwendung führt jedoch zu einem Fehler in der Java-Sprache.
Ich habe es sowohl mit Variablen als auch mit Methoden versucht und bin mir ziemlich sicher, dass es nicht existiert, aber ich möchte eine Erklärung dessen, was passiert ist. Wurde es in Betracht gezogen und dann abgelehnt? Oder wurde es in einer neueren Version von Java entfernt?
Bearbeiten: Ich suche keine Informationen über das protected
Schlüsselwort.
private protected
Modifikator.private protected
in dieser Antwort, aber es erklärt nicht, warum oder was damit passiert ist, worum es bei dieser Frage geht.Antworten:
Entfernen des Zugriffsmodifikators
Java hatte ursprünglich den
private protected
Modifikator, wurde jedoch in JDK 1.0.2 (der ersten stabilen Version, Java 1.0, die wir heute kennen) entfernt. In einigen Tutorials zu JDK 1.0.2 ( hier und hier ) heißt es:Eine weitere Antwort auf SoftwareEngineering.SE lautet:
Schauen Sie sich jetzt den Java-Versionsverlauf an :
Daraus können wir schließen, dass sich die Tutorials zu Version 1.0.2 auf die allererste Version, JDK 1.0, beziehen, in der die Sprache Oak hieß, die von SoftwareEngineering.SE jedoch auf die erste stabile Version, JDK 1.0.2, genannt Java 1.0, wo es entfernt wurde.
Wenn Sie nun versuchen, in der Java 1.0-Dokumentation danach zu suchen , werden Sie es nicht finden, da es, wie bereits erwähnt, in JDK 1.0.2, auch bekannt als Java 1.0, entfernt wurde. Dies wird erneut bewiesen, wenn Sie sich die "Zuletzt geänderten" Zeiten für den von Ihnen geposteten Link ansehen. Der von Ihnen veröffentlichte Link wurde zuletzt im Februar 1996 geändert. Als Java 1.0 / JDK 1.0.2
private protected
entfernt wurde, wurde es nach Februar 1996 und gemäß der Spezifikation im August 1996 veröffentlicht.Grund für die Entfernung
Einige Quellen erklären auch den Grund dafür
private protected
, wie dieser . Zitieren:Und das SoftwareEngineering.SE unterstützt dies auch, indem es sagt, dass es die Inkonsistenzen und die zusätzliche Komplexität nicht wert war, so dass es frühzeitig entfernt wurde.
Deutung
Meine Interpretation von all dem ist, dass vielleicht in den Tagen der Eiche beide koexistieren durften (daher die Kombination). Da sich
protected
die Bedeutung von 1 geändert hatte , bestand möglicherweise die Notwendigkeit, dies zuzulassenprivate
undprotected
gleichzeitig. Die Einführung wurde zu komplex und war es nicht wert und wurde daher am Ende fallen gelassen. Zum Zeitpunkt der Einführung von Java 1.0 / JDK 1.0.2 war es gelöscht worden und daher nicht in der Dokumentation zu finden.1 In der Oak-Sprachspezifikation , Abschnitt 4.10, Zugriff auf Variablen und Methoden , wird darauf hingewiesen, dass der Standardmodifikator Folgendes war
protected
:Dies unterscheidet sich erheblich von dem, was wir heute haben, dem Standardpaketzugriff. Dies mag den Weg für die Notwendigkeit von geebnet haben
private protected
, weilprivate
es zu restriktiv undprotected
zu nachsichtig war.quelle
Early on, the Java language allowed for certain combinations of modifiers,
Bedeutet das, dass es mehr als nur "Private Protected" gab?Es gibt verwirrende / unklare Geschichten:
Eine aus der von Ihnen angegebenen Princeton-Quelle und auch aus MIT-Archiven besagt:
Diese Funktion ist jedoch in keiner offiziellen Dokumentation für Java 1.0 hier oder hier angegeben .
Ich vermute, dass diese Funktion es nicht in die offizielle Version 1.0 geschafft hat, da die offizielle Sprachspezifikation von August 1996 stammt und die Quelle von Princeton zuletzt im Februar 1996 geändert wurde .
PS: Schande über Oracle, dass die Archive für ältere Versionen entfernt wurden.
quelle
Als Link , den Sie in Ihrer Frage zur Verfügung gestellt schlägt
private protected
wurde auf einem verwendetelement/member
eine Klasse, wenn Sie Ihren wollensubclass
das Element in der Lage des Zugang zu sein , aber halten Sie es in seinem von anderen Klassen verstecktpackage
.Java
im Vergleich zuC++
hat ein zusätzliches Konzept der Kapselung von Elementen - und das ist ein Paket . Man sollte auch verstehen , was in innerhalb oder außerhalb eines Pakets zugänglich ist ,Java
wenn es darum geht, diese Zugang-Planer wieprivate
,public
undprotected
.Bitte beachten Sie, dass ich erklärt habe, warum es verwendet wurde. Natürlich nicht in der aktuellen Version
quelle
Nein, Sie können nicht beide verwenden
private
eineprotected
zusammen. Dein Tutorial ist seltsam. Was Sie haben, ist so genanntes Paket privat oder in ot6 Referenzen paketgeschützter Zugriff. Dies ist der Standardzugriff, der aktiviert wird, wenn kein acc6-Qualifizierer explizit geschrieben wird.quelle
Der private Bereich bezieht sich auf die vorhandene Klasse. Wobei Protected innerhalb von Paketen und Klassen zugänglich sein kann, die durch Klassen in anderen Paketen erweitert wurden.
Wenn Sie nahtlos auf Ihre Variablen / Methoden außerhalb des Pakets zugreifen möchten, müssen Sie diese als geschützt / öffentlich, ansonsten privat oder als andere Zugriffsspezifizierer definieren.
Auf geschützte Methoden kann normalerweise von außerhalb des Pakets und innerhalb von Unterklassen zugegriffen werden, dh eine Klasse muss die jeweilige Klasse erweitern, um geschützte definierte Methoden nutzen zu können.
Private Methoden / Variablen haben einen Gültigkeitsbereich innerhalb der Klasse. Auf sie kann außerhalb der Klasse nicht zugegriffen werden.
Daher können Sie Private Protected nicht gleichzeitig definieren!
quelle