
【Java】アクセス修飾子についてまとめてみた
公開日: 2025/4/25
今回はアクセス修飾子についてまとめてみます。
Javaには4つのアクセス修飾子があり、クラス・メンバフィールド・メソッドの他クラスへの公開範囲を決める修飾子を意味するものです。
修飾子とはプログラム言語で、変数、関数、クラスなどの要素を振る舞いや性質を変更するキーワードのことです。
修飾子は、その要素がどのように動作し、他の部分とどのように関連するかを制御するために使用されます。
下記で示した4つのアクセス修飾子は、プログラムのセキュリティ、カプセル化、情報隠蔽などの様々な目的で使用されます。
1. アクセス修飾子の種類

・public
他のクラスやパッケージからアクセス可能な要素を定義するために使用される修飾子になります。つまり、publicで修飾されたクラス、メソッド、またはフィールドは、プログラム内のどこからでもアクセスできます。
・private
クラスのフィールドやメソッドに適用される修飾子の一つです。privateで修飾されたクラス、メソッド、またはフィールドは、現在のクラス内からのみアクセスが可能であり、他のクラスからは直接アクセスすることができません。
・アクセス修飾子なし
アクセス修飾子を指定しなかった場合に適用される修飾子の一つです。この場合、クラスやそのフィールドやメソッドは同じパッケージ内からのみアクセス可能となります。
つまり、同じパッケージ内にある他のクラスからは自由にアクセスできますが、異なるパッケージ内にあるクラスからはアクセスできません。
・protected
現在のクラスとそのクラスを継承したサブクラスからアクセスできます。protected修飾子が付与されたクラス、メソッド、またはフィールドは、同じパッケージ内の他のクラスからもアクセスでき、さらにそのクラスを継承したサブクラスからもアクセスできます。
しかし、同じパッケージ内にあるが継承関係にないクラスや、別のパッケージにあるクラスからはアクセスできません。
次からは今説明した、アクセス修飾子について具体的にコードを記述しながら説明していきます。
2. 使用例

・public
まずはpublicからです。Test.java
package projava;
public class Test {
public void testMethod() {
System.out.println("このメソッドはどこからでも呼び出せます");
}
}
SecondTest.java
package projava;
public class SecondTest {
public static void main(String[] args) {
Test obj = new Test();
obj.testMethod(); // Testクラスのpublicメソッドにアクセス
}
}
上記で書いたコードはTest.javaのpublicクラスをSecondTest.javaのクラスで呼び出しているコードになります。
このコードをSecondTest.java側でコンパイルすると、Test.javaのpublicクラスを呼び出して実行しています。
結果は「このメソッドはどこからでも呼び出せます」と表示されるはずです。
例えばこのメソッドのpublicをprivateに変えると、エラーが表示されてコンパイルすることができません。
ではどのように書き換えれば呼び出せるのか、次にprivateについて説明します。
・private
publicの説明で使用したコードを流用していきます。Test.java
package projava;
public class Test {
private void testMethod() {
System.out.println("このメソッドは同じクラスからのみ呼び出せます");
}
public void callTestMethod() {
testMethod(); // 同じクラス内であれば、privateメソッドにアクセス可能
}
}
SecondTest.java
package projava;
public class SecondTest {
public static void main(String[] args) {
Test obj = new Test();
obj.callTestMethod(); // Testクラスのpublicメソッドにアクセス
}
}
このように、privateメソッドになったtestMethod()を呼び出すには、一度同じクラス内にpublicメソッドを作成してtestMethod()を呼び出します。
この場合は新しくcallTestMethod()という名前で定義しています。
そして、SecondTestクラスで呼び直したcallTestMethod()を呼ぶとtestMethod()が間接的に実行され
3. まとめ

今回はアクセス修飾子について解説しました。
アクセス修飾子にはアクセス権を制御するアクセス修飾子の他にも、非アクセス修飾子と呼ばれる機能や振る舞いを制御する修飾子もあります。
さらに今回はprotectedを解説している中で継承というものも出てきました。
Javaを学習する時には芋づる式に理解しておくべき考え方や知識が出てくるので、一つづつ理解しておくようにしてください。