[解決済み] Javaには "private protected "というアクセス修飾子があるのですか?
質問
Java のアクセス修飾子である
private protected
(両方の単語を合わせて)。
private protected someMethod() {
}
これを参考にしているページのひとつが こちら . 私の学校の授業でも、このアクセス修飾子について言及しました(存在すると言っていました)。しかし、これを使うと、Java言語ではエラーになります。
変数とメソッドの両方で試したので、存在しないことは間違いないのですが、何が起こったのか説明が欲しいです。検討された後、却下されたのでしょうか?それとも、Javaの新しいバージョンで削除されたのでしょうか?
編集: 私は
protected
キーワードを使用します。
どのように解決するのですか?
アクセス修飾子の削除
Javaはもともと
private protected
モディファイアは、JDK 1.0.2 で削除されました(最初の
安定した
のバージョンで、現在私たちが知っているJava 1.0です)。JDK 1.0.2に関するいくつかのチュートリアル(
こちら
と
こちら
)は次のように言っています。
注:Java言語の1.0リリースでは、上記の4つに加え、5つのアクセスレベルをサポートしていました。
private protected
. そのprivate protected
アクセス・レベルは、Java 1.0 以降のバージョンではサポートされていません。
別の SoftwareEngineering.SEに関する回答 が記載されています。
Javaにはもともとこのようなモディファイアがありました。それは次のように書かれていた。
private protected
が、Java 1.0で削除された。
では、次に Javaバージョン履歴 :
JDK 1.0
最初のバージョンをリリースしたのは 1996年1月23日 という名前になりました。 最初の安定版であるJDK1.0.2は、Java 1と呼ばれている。
このことから、バージョン1.0.2に関するチュートリアルは、言語がOakと呼ばれていた一番最初のバージョン、JDK 1.0を指していますが、SoftwareEngineering.SEのものは、それが削除されたJava 1.0という最初の安定版、JDK 1.0.2について述べていると結論づけることができます。
ここで、試しに検索してみると
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月です。
削除理由
の理由を説明する資料もあります。
private protected
のようなものです。
これ
の1つです。引用すると
プライベートは何を守ったのか?
初期の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の頃には、この導入は中止されており、したがってドキュメントで見つけることはできません。
1
での
オーク言語仕様
の、4.10節をご覧ください。
変数とメソッドへのアクセス
であったことが指摘されており、デフォルトのモディファイアは
protected
:
デフォルトでは、クラス内のすべての変数とメソッドは プロテクト .
これは、現在のデフォルトのパッケージアクセスとは全く異なるものです。の必要性への道を切り開いたと言えるかもしれません。
private protected
というのも
private
は制約が多すぎるし
protected
は甘すぎる。
関連
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] C#では、public、private、protected、アクセス修飾子がないことの違いは何ですか?
-
[解決済み] Javaは複数行の文字列をサポートしていますか?
-
[解決済み] 内部アクセス修飾子 vs. プライベートアクセス修飾子
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】Swiftにアクセス修飾語はあるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
java の例外が発生しました java
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
final, finally, finalizeの違いについて話してください。
-
SpringBootApplication を型解決できない。
-
をインスタンス化することができません。
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。