Javaのprivate protected
と呼ばれるアクセス修飾子(両方の単語を一緒にしたもの)を参照する参照がいくつかあります。
private protected someMethod() {
}
これについて言及しているページの1つは here です。私の学校の授業でも、このアクセス修飾子に言及しました(そして、それは存在すると言いました)。ただし、これを使用すると、Java言語でエラーが発生します。
変数とメソッドの両方を試しましたが、存在しないことは確かですが、何が起こったのか説明が必要です。それは考慮され、その後拒否されましたか?または、Javaの新しいバージョンで削除されましたか?
編集:protected
キーワードに関する情報を探していません。
Javaには元々private protected
修飾子がありましたが、JDK 1.0.2(最初のstableバージョン、Java今日は1.0を知っています)。 JDK 1.0.2に関するいくつかのチュートリアル( here および here )は次のように述べています。
注:Java言語の1.0リリースは、5つのアクセスレベルをサポートしました。上記の4つと
private protected
です。private protected
アクセスレベルは、1.0より高いJavaのバージョンではサポートされていません。 Javaプログラムで使用しないでください。
別の SoftwareEngineering.SEに関する回答 状態:
Javaには元々そのような修飾子がありました。
private protected
と書かれていましたが、Java 1.0で削除されました。
Javaバージョン履歴 を見てください:
JDK 1.0
最初のバージョンは1996年1月23日にリリースされ、Oakと呼ばれていました。 最初の安定バージョンであるJDK 1.0.2は、Java 1。と呼ばれます
これから、バージョン1.0.2に関するチュートリアルは、最初のバージョンであるJDK 1.0を参照し、言語はOakと呼ばれていましたが、SoftwareEngineering.SEのチュートリアルは_と呼ばれる最初の安定バージョンであるJDK 1.0.2を参照しています。Java 1.0、削除された場所。
Java 1.0ドキュメント で検索しようとしても、それは見つかりません。前述のように、JDK 1.0.2で削除されていたため、別名Java 1.0。これは、投稿したリンクの「Last Modified」時間を見ると再び証明されています。投稿したリンクは1996年2月に最後に変更されました。Java 1.0/JDK 1.0.2は、private protected
が削除されたときにリリースされました1996年2月以降 1996年8月の仕様による。
this oneなど、private protected
の理由を説明するソースもあります。引用するには:
プライベート保護されたものは何ですか?
早い段階で、Java言語は修飾子の特定の組み合わせを許可し、その1つは
private protected
でした。private protected
の意味は、可視性をサブクラスのみに制限することでした(そしてパッケージアクセスを削除します)。これは後にやや一貫性がなく、過度に複雑であると見なされ、サポートされなくなりました。[5][5]
protected
修飾子の意味はJavaのBeta2リリースで変更され、private protected
の組み合わせが同時に登場しました。彼らはいくつかの潜在的なセキュリティホールを修正しましたが、多くの人々を混乱させました。
また、SoftwareEngineering.SEは、矛盾や余分な複雑さの価値はないと言って、これをサポートしているため、早期に削除されました。
このすべての私の解釈は、おそらくオークの時代に、両方が共存することを許可されていたということです(したがって、組み合わせ)。 protected
の意味が変更されたため1、private
とprotected
を同時に許可する必要があるかもしれません。導入は複雑すぎて価値がなかったため、最終的に削除されました。 Java 1.0/JDK 1.0.2がロールバックする頃には、ドロップされていたため、ドキュメントで見つけることができませんでした。
1Oak Language Specification 、セクション4.10、変数およびメソッドへのアクセスでは、デフォルトの修飾子がprotected
であったことに注意してください。
デフォルトでは、クラス内のすべての変数とメソッドはprotectedです。
これは、今日のデフォルトパッケージアクセスとはまったく異なります。 private
の制限が厳しく、protected
の許容度が高すぎるため、これはprivate protected
の必要性に道を開いた可能性があります。
紛らわしい/不明瞭なストーリーがあります:
1つ目は、Princetonのソース、および MITアーカイブ のソースです。
注:Java言語の1.0リリースは、5つのアクセスレベルをサポートしていました:上記の4つとプライベート保護されています。プライベート保護アクセスレベルは、1.0より高いJavaのバージョンではサポートされていません。 Javaプログラムで使用しないでください。
ただし、この機能はJava 1.0 here または here の公式ドキュメントでは指定されていません。
私の推測では、公式の言語仕様は1996年8月からであり、プリンストンのソースは最後に変更されたため、この機能は公式の1.0バージョンに到達しなかったと思われます 1996年2月 。
PS:古いバージョンのアーカイブを削除することに対するOracleの恥。
あなたの質問で提供したリンクが示唆するように、private protected
はクラスのelement/member
で使用され、subclass
が要素にアクセスできるようにしたいが、 package
。
Java
は、C++
と比較した場合、要素をカプセル化するという特別な概念があり、それはPackageです。 Java
、private
、およびpublic
などのアクセス指定子に関しては、protected
のパッケージ内外でアクセス可能なものを理解する必要があります。
なぜそれが使用されたのか説明したことに注意してください。もちろん現在のバージョンではありません
いいえ、private
とprotected
の両方を一緒に使用することはできません。あなたのチュートリアルは奇妙です。あなたが持っているのは、いわゆるパッケージプライベートまたはot6参照パッケージ保護アクセスです。これは、acc6修飾子が明示的に記述されていない場合に有効になるデフォルトのアクセスです。