4

Java には、、、、package-private (デフォルト)、および のpublic4つのアクセス指定子があります。これはよく知られており、私にとっては問題ではありません。protectedprivate

のネーミングについて質問ですprotectedここの表に示されているように、フィールドに package-private のデフォルト アクセス指定子を指定すると、パッケージ外のサブクラスがそのフィールドを使用できなくなりますが、キーワードを適用しprotectedても実際には保護されません。任意のパッケージ。

では、なぜprotected物事を保護しないのでしょうか。修飾子がまったくないよりも制限が少ないのはなぜですか?

4

3 に答える 3

6

これらが存在すべき 4 つのアクセス レベル (private、package-private、package-private-plus-subclasses、および public) であることを認め、そうでない場合は package-private がデフォルトのアクセス レベルであることを認めます。他の何かを指定すると、この質問は次のようになりprotectedます。それに対する答えは、C++ から用語を借用/継承したことです (「パッケージ」の概念はありませんが、protected「プライベート プラス サブクラス」を意味するために使用されます)。

(私はこの回答をコミュニティ wiki として投稿して、他の人が追加することを奨励しています。これよりも多くのことがストーリーにあると推測しているためです。また、誰かがこれらが 4 つのアクセスである理由の正当化を追加したい場合があるためです。たとえば、package-private-plus-subclass があるのに private-plus-subclass がない理由、および package-private をデフォルトにする理由など)。

于 2013-03-25T23:00:45.377 に答える
3

これはどちらかというと自由回答形式の質問なので、やや関連性のある歴史的背景を説明します。Java 1.0 では、private protected という追加のアクセス修飾子がありました。これは、パッケージ アクセスを差し引いて保護されていました。この修飾子は紛らわしく、実装が不十分で、1.1 で削除されました。これは、パッケージが論理モジュラー ユニットであり、デフォルトのアクセス レベルであるという図を描くのに役立ちます。

最終的には、開発者にとって意味のあるものを個人的に選択することになります。考え方は人それぞれなので、私にとって完全に理にかなっている命名規則は、あなたにとっては非常に混乱するかもしれません (逆もまた同様です)。

于 2013-03-25T23:06:15.147 に答える
1

Protected は public よりも制限的です。それがそれが何であるかと呼ばれる理由です。

デフォルトは多くのプログラマーにとって非常に紛らわしいので、言語設計者がデフォルトのアクセス指定子を「package-protected」と名付けてくれたらよかったのにと思います。 .

于 2013-03-25T22:59:57.403 に答える