Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaのアクセス修飾子とは

アクセス修飾子とは、クラスやメンバフィールド、メソッドの他クラスへの公開範囲を決定する修飾子のことです。

アクセス修飾子によってアクセスの制限をかけられ、その種類には4つあります。

アクセス修飾子の種類一覧

Javaのアクセス修飾子には以下の4つがあります。

4種類のアクセス修飾子
  • public
  • protected
  • private
  • 指定なし(デフォルト)

それぞれについて見ていきましょう。

public

publicは、どこからでもアクセスを可能にできるアクセス修飾子です。

publicなクラス・インタフェースは、1つのファイルに1つしか記述できないという特徴もあります。

また、「拡張子を除くファイル名」と「クラス・インタフェース名」は同じであることが条件です。

ポテパンダの一言メモ

加えて、パッケージの直下にある通常のクラス(トップレベルクラス)に付加できるアクセス修飾子は publicのみとなっています

  1. ■記述例
  2. class ClassPublic {
  3. public String str = "ClassPublicのstr変数です";
  4. }
  5.  
  6. public class Main {
  7. public static void main(String[] args) {
  8. ClassPublic cp = new ClassPublic();
  9. System.out.println(cp.str);
  10. }
  11. }
  1. ■実行結果
  2. ClassPublicstr変数です

protected

protectedは、同じパッケージ内のクラスや異なるパッケージであっても、該当クラスを継承したサブクラス内部からアクセスできるアクセス修飾子です。

サブクラスから参照するケースの記述例は、下記のようになります。

  1. ■記述例
  2. class ClassSuper {
  3. protected String str = "ClassSuperのstr変数です";
  4. }
  5.  
  6. public class ClassSub extends ClassSuper {
  7. public static void main(String[] args) {
  8. ClassSub cs = new ClassSub();
  9. System.out.println(cs.str);
  10. }
  11. }
  1. ■実行結果
  2. ClassSuperstr変数です

同一クラスから参照するケースの記述例は、下記のようになります。

  1. ■記述例
  2. public class ClassSub{
  3. public static void main(String[] args) {
  4. methodSub();
  5. }
  6.  
  7. protected static void methodSub() {
  8. System.out.println("methodSubで出力しています");
  9. }
  10. }
  1. ■実行結果
  2. methodSubで出力しています

private

privateは、クラス内部からのみアクセスができるアクセス修飾子です。

外部からのアクセスを不用意に許可せず、決められたメソッドからのみアクセスさせたい場合に有効なアクセス修飾子になっています。

  1. ■記述例
  2. class ClassPrivate {
  3. private String str = "ClassPublicのstr変数です";
  4. public void privateMethod() {
  5. System.out.println(str + ":ClassPublicで出力しています!");
  6. }
  7. }
  8.  
  9. public class Main {
  10. public static void main(String[] args) {
  11. ClassPrivate cp = new ClassPrivate();
  12. cp.privateMethod();
  13. }
  14. }
  1. ■実行結果
  2. ClassPublicstr変数です:ClassPublicで出力しています!

指定なし(デフォルト)

アクセス修飾子が付けられておらず、指定がない場合のアクセス指定です。

この場合、同パッケージ内のすべてのクラスからアクセスできるようになります

アクセス修飾子のスコープ一覧

アクセス修飾子のスコープ範囲は、下記のように分けられています。

アクセス修飾子 同一クラス 同一パッケージ サブクラス すべて
public
protected ×
指定なし × ×
private × × ×
ポテパンダの一言メモ

public修飾子のスコープが最も広く設定されており、どのクラスからも参照できますね。

アクセス修飾子を記述する順番

アクセス修飾子は、クラスやメソッド、フィールドで複数の修飾子を列挙する場合、以下のように記述できます。

  1. アクセス修飾子(publilcprotectedprivate) + static

このように、アクセス修飾子は一番左側に記述し、staticなどの修飾子はアクセス修飾子の後ろに記述しましょう

アクセス修飾子の使い方

アクセス修飾子の使い方をサンプルコードで紹介します。

  1. ■記述例
  2. class Point {
  3. private int privatePoint;
  4. public void setPoint(int privatePoint) {
  5. this.privatePoint = privatePoint;
  6. }
  7. public int getPoint() {
  8. return privatePoint;
  9. }
  10. }
  11.  
  12. public class Main {
  13. public static void main(String[] args) {
  14. Point point = new Point();
  15. int get = 5000;
  16. point.setPoint(get);
  17. System.out.println("取得したポイント:" + get);
  18. int nowPoint = point.getPoint();
  19. System.out.println("現在所有しているポイント:" + nowPoint);
  20. }
  21. }
  22.  

上記のプログラムを実行すると、下記の実行結果を得られます。

  1. ■実行結果
  2. 取得したポイント:5000
  3. 現在所有しているポイント:5000

また、17行目に「point.privatePoint = 0;」を追加すると、private修飾子のprivatePointを操作しようとしているためエラーが表示されます。

  1. ■記述例
  2. class Point {
  3. private int privatePoint;
  4. public void setPoint(int privatePoint) {
  5. this.privatePoint = privatePoint;
  6. }
  7. public int getPoint() {
  8. return privatePoint;
  9. }
  10. }
  11.  
  12. public class Main {
  13. public static void main(String[] args) {
  14. Point point = new Point();
  15. int get = 5000;
  16. point.setPoint(get);
  17. System.out.println("取得したポイント:" + get);
  18. point.privatePoint = 0;
  19. int nowPoint = point.getPoint();
  20. System.out.println("現在所有しているポイント:" + nowPoint);
  21. }
  22. }
  1. ■実行結果
  2. Main.java:17: エラー: privatePointPointprivateアクセスされます
  3. point.privatePoint = 0;
  4. ^
  5. エラー1

アクセス修飾子の使い分け

アクセス修飾子を使い分けるのは、アクセス範囲を定めたい場合です。

フィールドやメソッドに対してアクセス修飾子を設定すれば、他クラスから参照させるのか・させないのかを制御できます。

ポテパンダの一言メモ

これは、作成するプログラムや内容によりますので、必要に応じて適切なアクセス修飾子を使いましょう。

アクセス修飾子は省略できる?なしの場合は?

アクセス修飾子は省略可能です。

なしの場合は、同パッケージ内のすべてのクラスからアクセスできます。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。