カテゴリ: Javaのカプセル化 更新日: 2026/01/02

Javaのアクセス修飾子を完全ガイド!初心者でもわかるpublic、private、protectedの使い方

143
Java の public, private, protected のアクセス修飾子とは?

先生と生徒の会話形式で理解しよう

生徒

「Javaでpublicprivateって見かけるんですが、これは何ですか?」

先生

「それはアクセス修飾子と呼ばれるもので、クラスやメソッド、変数などのアクセス範囲を制御するためのキーワードです。」

生徒

「アクセス範囲を制御するって、どういうことですか?」

先生

「それでは、publicprivateprotectedの違いを具体的に見ていきましょう!」

1. アクセス修飾子とは?

1. アクセス修飾子とは?
1. アクセス修飾子とは?

Javaのアクセス修飾子は、クラスやメソッド、フィールド(変数)などがどこからアクセスできるかを指定するキーワードです。主に以下の4種類があります。

  • public:すべてのクラスからアクセス可能
  • protected:同じパッケージ内およびサブクラスからアクセス可能
  • (指定なし):同じパッケージ内からのみアクセス可能(デフォルトアクセス)
  • private:同じクラス内からのみアクセス可能

これらを適切に使い分けることで、プログラムの安全性や保守性を高めることができます。

2. publicの使い方

2. publicの使い方
2. publicの使い方

publicは、どこからでもアクセスできるようにするための修飾子です。クラスやメソッド、フィールドに付けることで、他のクラスから自由に利用できるようになります。


public class Sample {
    public int number = 10;

    public void display() {
        System.out.println("Number: " + number);
    }
}

上記の例では、Sampleクラスのnumberフィールドとdisplayメソッドがpublicとして定義されているため、他のクラスから直接アクセスできます。

3. privateの使い方

3. privateの使い方
3. privateの使い方

privateは、同じクラス内からのみアクセスできるようにする修飾子です。外部からのアクセスを制限し、データの隠蔽(カプセル化)を実現します。


public class Sample {
    private int number = 10;

    public void display() {
        System.out.println("Number: " + number);
    }
}

上記の例では、numberフィールドがprivateとして定義されているため、Sampleクラスの外部から直接アクセスすることはできません。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. protectedの使い方

4. protectedの使い方
4. protectedの使い方

protectedは、同じパッケージ内およびサブクラスからアクセスできるようにする修飾子です。継承関係にあるクラスでの利用を想定しています。


public class Parent {
    protected int number = 10;
}

public class Child extends Parent {
    public void display() {
        System.out.println("Number: " + number);
    }
}

上記の例では、ChildクラスがParentクラスを継承しており、numberフィールドにアクセスしています。protectedとして定義されているため、アクセスが可能です。

5. アクセス修飾子の比較表

5. アクセス修飾子の比較表
5. アクセス修飾子の比較表

各アクセス修飾子のアクセス範囲を表にまとめると、以下のようになります。

アクセス修飾子 同じクラス 同じパッケージ サブクラス 他のパッケージ
public
protected ×
(指定なし) × ×
private × × ×

この表を参考に、適切なアクセス修飾子を選択しましょう。

6. アクセス修飾子を使ったサンプルプログラム

6. アクセス修飾子を使ったサンプルプログラム
6. アクセス修飾子を使ったサンプルプログラム

以下は、各アクセス修飾子を使ったサンプルプログラムです。


// Main.java
public class Main {
    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.publicMethod();
        // sample.privateMethod(); // エラー: privateメソッドにはアクセスできません
        // sample.protectedMethod(); // エラー: protectedメソッドにはアクセスできません
    }
}

// Sample.java
public class Sample {
    public void publicMethod() {
        System.out.println("Public method");
    }

    private void privateMethod() {
        System.out.println("Private method");
    }

    protected void protectedMethod() {
        System.out.println("Protected method");
    }
}

このプログラムでは、publicMethodはアクセス可能ですが、privateMethodprotectedMethodはアクセスできません。

7. アクセス修飾子の使い分けのポイント

7. アクセス修飾子の使い分けのポイント
7. アクセス修飾子の使い分けのポイント

アクセス修飾子を適切に使い分けることで、プログラムの安全性や保守性を高めることができます。以下のポイントを参考にしましょう。

  • public:他のクラスからも利用する必要がある場合に使用
  • private:クラス内部でのみ使用し、外部からのアクセスを制限したい場合に使用
  • protected:継承関係にあるクラスで利用する場合に使用
  • (指定なし):同じパッケージ内でのみ利用する場合に使用

アクセス修飾子を適切に使い分けることで、プログラムの構造を明確にし、バグの発生を防ぐことができます。

まとめ

まとめ
まとめ

アクセス修飾子を理解することの重要性

ここまで、Javaのアクセス修飾子であるpublic、private、protected、そして指定なしのデフォルトアクセスについて詳しく見てきました。アクセス修飾子は、Javaプログラミングにおいて非常に基本的でありながら、プログラム全体の設計品質や安全性、保守性に大きく影響する重要な要素です。クラス、メソッド、フィールドに対して適切なアクセス範囲を設定することで、意図しない利用や誤った操作を防ぎ、バグの少ない堅牢なコードを書くことができます。

特に初心者のうちは、すべてをpublicにしてしまいがちですが、それではクラスの内部構造が外部に丸見えになり、後から仕様変更が発生した際に修正範囲が広がってしまいます。アクセス修飾子を正しく理解し、必要最小限の公開範囲を意識することが、Javaのオブジェクト指向プログラミングを身につける第一歩と言えるでしょう。

publicとprivateを中心に考える設計

実務や学習の中では、まずpublicとprivateを正しく使い分けられるようになることが大切です。外部から呼び出される必要があるメソッドやクラスのみをpublicにし、それ以外の内部処理やデータはprivateにすることで、クラスの責務が明確になります。これはカプセル化と呼ばれる考え方で、Javaだけでなく多くのプログラミング言語に共通する重要な概念です。

protectedは継承を前提とした設計で活躍しますが、安易に使いすぎるとクラス間の依存関係が複雑になるため、役割を理解した上で使う必要があります。まずはpublicとprivateを軸に設計し、必要に応じてprotectedやデフォルトアクセスを選択する、という順序で考えると理解しやすくなります。

まとめとしてのサンプルプログラム

最後に、これまで学んだアクセス修飾子の考え方を整理するためのシンプルなサンプルプログラムを見てみましょう。クラスの外部から触ってよい部分と、内部で隠しておく部分を意識して設計しています。


public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void showProfile() {
        System.out.println("名前:" + name + " 年齢:" + age);
    }
}

この例では、nameとageはprivateにすることで外部から直接変更できないようにしています。その代わり、publicなコンストラクタやメソッドを通して安全に情報を扱えるようにしています。このような設計を意識することで、Javaのクラスはより読みやすく、壊れにくいものになります。

先生と生徒の振り返り会話

生徒

「アクセス修飾子って、最初はただのルールだと思っていましたが、プログラムの安全性や読みやすさに直結しているんですね。」

先生

「その通りです。特にJavaでは、アクセス修飾子をどう使うかで設計の良し悪しがはっきり分かれます。」

生徒

「これからは、とりあえずpublicにするのではなく、本当に外から使う必要があるかを考えるようにします。」

先生

「それができれば大きな一歩ですね。まずはprivateを基本にして、必要なものだけをpublicにする意識を持ちましょう。」

生徒

「protectedやデフォルトアクセスも、継承やパッケージを意識したときに使えるよう復習してみます。」

先生

「とても良い姿勢です。アクセス修飾子を理解できれば、Javaのクラス設計が一気に楽しくなりますよ。」

Javaのカプセル化の一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク