Menu
Coddy logo textTech

アクセスレベルの概要

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 10/87。

アクセス修飾子は、フィールドやメソッドがどこからアクセスできるかを制御します。Javaには4つのレベルのアクセス制御があります。

修飾子同一クラス同一パッケージサブクラスすべての場所
privateはいいいえいいえいいえ
デフォルト (キーワードなし)はいはいいいえいいえ
protectedはいはいはいいいえ
publicはいはいはいはい
public class BankAccount {
    private double balance;      // このクラス内のみ
    String accountType;          // デフォルト:同一パッケージ内のみ
    protected String owner;      // 同一パッケージ内 + サブクラス
    public String bankName;      // どこからでもアクセス可能
}

private は最も制限が厳しく、直接アクセスすべきではない内部データに使用します。public は最も制限が緩く、他のクラスから呼び出す必要があるメソッドに使用します。

修飾子を指定しない場合、Javaはデフォルト(パッケージプライベートとも呼ばれる)アクセスを使用します。これにより、同じパッケージ内からのみアクセスが可能になります。

class Helper {           // デフォルトアクセスのクラス
    void assist() { }    // デフォルトアクセスのメソッド
}

コードが正常に動作する範囲内で、最も制限の厳しいアクセスレベルを選択してください。これにより、データが保護され、コードのメンテナンスが容易になります。

challenge icon

チャレンジ

簡単

アクセス修飾子が異なるファイル間での可視性をどのように制御するかを実証する、Student 記録システムを構築しましょう。

コードを整理するために、2つのファイルを作成します:

  • Student.java: 異なるアクセスレベルのフィールドを持つ Student クラスを定義します:
    • private フィールド: studentId (String) - Student クラス内からのみアクセス可能
    • デフォルト(修飾子なし)フィールド: grade (int) - 同じパッケージ内からアクセス可能
    • protected フィールド: name (String) - 同じパッケージ内およびサブクラスからアクセス可能
    • public フィールド: school (String) - どこからでもアクセス可能
    4つのフィールドすべてを設定するコンストラクタと、"[studentId] name - Grade grade at school" という形式の文字列を返す public メソッド getInfo() を含めてください。
  • Main.java: Student オブジェクトを作成し、クラスの外部からどのフィールドに直接アクセスできるかを実証します。school フィールドを直接出力し、次に getInfo() の結果を出力して、すべての生徒情報を表示します。

studentId、name、grade、school の4つの入力(この順序)を受け取ります。

出力は2行にする必要があります:直接アクセスした学校名と、それに続く getInfo() メソッドからの完全な生徒情報です。

チートシート

アクセス修飾子は、フィールドやメソッドにどこからアクセスできるかを制御します。Javaには4つのレベルのアクセス制御があります。

修飾子同一クラス内同一パッケージ内サブクラスどこからでも
privateYesNoNoNo
default (キーワードなし)YesYesNoNo
protectedYesYesYesNo
publicYesYesYesYes
public class BankAccount {
    private double balance;      // このクラス内のみ
    String accountType;          // デフォルト:同一パッケージ内のみ
    protected String owner;      // 同一パッケージ内 + サブクラス
    public String bankName;      // どこからでもアクセス可能
}

private は最も制限が厳しく、直接アクセスすべきではない内部データに使用します。public は最も開放的で、他のクラスが呼び出す必要があるメソッドに使用します。

修飾子を指定しない場合、Javaはデフォルト(パッケージプライベートとも呼ばれます)アクセスを使用します。これにより、同一パッケージ内からのみアクセスが許可されます。

class Helper {           // デフォルトアクセスのクラス
    void assist() { }    // デフォルトアクセスのメソッド
}

コードが正常に動作する範囲内で、最も制限の厳しいアクセスレベルを選択してください。これによりデータが保護され、コードのメンテナンスが容易になります。

自分で試してみよう

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 入力を読み込む
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int grade = Integer.parseInt(scanner.nextLine());
        String school = scanner.nextLine();
        
        // TODO: 入力値を使用して Student オブジェクトを作成する
        
        
        // TODO: school フィールドを直接出力する(public なのでアクセス可能)
        
        
        // TODO: getInfo() の結果を出力して、すべての学生情報を表示する
        
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン