Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
public / private / protected / static / final
クラス・フィールド・メソッドへのアクセス範囲を制御する修飾子です。『public』『private』『protected』でアクセス可能な範囲を指定し、『static』でインスタンスに依存しないメンバーを定義し、『final』で変更不可の定数を宣言します。
構文
// アクセス修飾子付きのフィールド定義です。
public String name;
private int age;
protected double score;
// staticフィールド(クラス変数)の定義です。
static int count = 0;
// 定数の定義です(staticとfinalを組み合わせます)。
static final double PI = 3.14159;
// staticメソッドの定義です。
static void printCount() {
System.out.println(count);
}
// privateフィールドへのアクセサメソッド(getter / setter)です。
public int getAge() { return age; }
public void setAge(int age) {
if (age >= 0) this.age = age;
}
修飾子一覧
| 修飾子 | 概要 |
|---|---|
| public | すべてのクラスからアクセスできます。 |
| private | 同じクラス内からのみアクセスできます。フィールドは通常 private にしてカプセル化します。 |
| protected | 同じパッケージ内と、サブクラスからアクセスできます。 |
| (なし) | パッケージプライベートです。同じパッケージ内のクラスからのみアクセスできます。 |
| static | インスタンスではなくクラスに属するメンバーです。インスタンスを生成せずにアクセスできます。 |
| final(フィールド) | 一度代入したら変更できない定数です。static final でクラス定数を定義します。 |
| final(クラス) | 継承できないクラスを定義します(例: String クラス)。 |
| final(メソッド) | サブクラスでオーバーライドできないメソッドを定義します。 |
サンプルコード
class Counter {
// privateフィールド(直接アクセス不可)
private int count = 0;
// staticフィールド(全インスタンス共有)
static int total = 0;
// 定数(変更不可)
static final int MAX = 100;
// publicメソッドでprivateフィールドを操作します(カプセル化)。
public void increment() {
if (count < MAX) {
count++;
total++;
}
}
public int getCount() { return count; }
}
Counter c1 = new Counter();
Counter c2 = new Counter();
c1.increment();
c1.increment();
c2.increment();
System.out.println(c1.getCount()); // 『2』と出力されます。
System.out.println(c2.getCount()); // 『1』と出力されます。
System.out.println(Counter.total); // 『3』と出力されます(static共有)。
System.out.println(Counter.MAX); // 『100』と出力されます。
// staticメソッドはクラス名で呼び出します。
class MathHelper {
static int square(int n) { return n * n; }
}
System.out.println(MathHelper.square(5)); // 『25』と出力されます。
概要
カプセル化の原則として、フィールドは private にしてゲッター・セッターでアクセスするのが一般的です。これにより、値の検証ロジックを集約できます。
『static』メンバーはクラスに属するためインスタンスを生成せずに使え、すべてのインスタンスで値が共有されます。カウンターや定数、ユーティリティメソッドによく使われます。定数は慣例として UPPER_SNAKE_CASE(大文字スネークケース)で命名します。
クラスの定義とインスタンス生成については『class / new / コンストラクタ / this』を、継承については『extends / super / @Override』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。