Java アクセス修飾子のまとめ(private、protected、public)

今回は、オブジェクト指向プログラミングで必ず目にする
アクセス修飾子についてまとめる。

private, protected, public などの違いについて
情報機科学初心者のマイルストーンとして残しておく。

概要

広告

Java private、protected、publicの違い

自分だけ、親族まで、全公開

private、protected、publicといったアクセス修飾子はJavaなどでは馴染みがあるが
Pythonといった言語では存在しない。そのため学んだ言語によってつい調べてしまうこともあるだろう。

Java, TypeScript, Ruby, PHPなどには、アクセス修飾子があり目的は一緒である。
下記に、各修飾子の範囲を示す。

アクセス修飾子名 アクセス可能な範囲
private 修飾子 自クラス内のみからアクセス可能(継承されたサブクラスからはアクセス不可)
protected 修飾子 自クラス、サブクラス、同一パッケージに属するクラスからアクセス可能
public 修飾子 任意のクラスからアクセス可能
指定しない場合 同一パッケージに属するクラスからアクセス可能

整理すると簡単である。
「同一パッケージ」とは後程軽く説明している。

補足だが、privateをつけるとサブクラスから変更することができないフィールドorメソッドとして定義できる。

Java パッケージとは

Wikipediaにおける定義を参照する。

Javaパッケージ(Java package)は名前空間の中にあるJavaクラスをまとめるメカニズムである。Javaパッケージは、JARファイルと呼ばれる圧縮ファイルの中に保存することができ、クラス群を一つのグループとしてまとめた方が1つずつダウンロードするよりも高速化される。プログラマも一般に同じカテゴリに属しているクラスや類似した機能を提供するクラスをまとめたパッケージを使う。

つまりJavaにおけるパッケージとは、
関連するクラス群をまとめる単位である。

パッケージについて下記のようなポイントがある、

  • java.langパッケージは暗黙的に読み込まれるが、その他については明示的に読み込む必要がある
  • import文で、該当パッケージを読み込む
  • import文は、ファイルの先頭に記述すること
protected修飾子は、上記のようにパッケージとしてまとめられたクラス群からのアクセスが可能になっている

一点注意点として、
トップレベルクラスではアクセス修飾子(Access Modifier)はpublicと指定なししか使えません。

アクセス修飾子protectedとprivateは,直接囲まれたクラス宣言内のメンバクラスにのみ適用されます。
(メンバクラス=クラス内のクラス)

詳しくはドキュメントを、
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.1



各アクセス修飾子はプログラミングする上で
しょっちゅう使うことになるので是非覚えておきたい。



じゃあね〜〜〜〜。