アクセス修飾子とは?
アクセス修飾子は、クラスや変数、メソッドがどこからアクセス可能であるかを制御するためのものです。Javaには、次の4種類のアクセス修飾子があります。
- public
- protected
- private
- デフォルト(修飾子なし)
クラスには public とデフォルトのアクセス修飾子を適用できますが、protected と private はクラスに対して使用できないことに注意してください。メソッドやフィールドにはすべての修飾子を使用することが可能です。
以下に、それぞれのアクセス修飾子がどのように機能するかを表でまとめてみました。
アクセス修飾子 | クラス内 | 同一パッケージ内 | サブクラス(異なるパッケージ内) | どこからでもアクセス可能 |
public | ⚪︎ | ⚪︎ | ⚪︎ | ⚪︎ |
protected | ⚪︎ | ⚪︎ | ⚪︎ | × |
デフォルト(なし) | ⚪︎ | ⚪︎ | × | × |
private | ⚪︎ | × | × | × |
コード例
1.public
Java
public class Car {
public String model; // どこからでもアクセスできる
public void startEngine() { // どこからでも呼び出し可能
System.out.println("エンジン始動");
}
}
2.private
Java
public class Car {
private String model; // 同一クラス内からしかアクセスできない
private void startEngine() { // 同一クラス内からしか呼び出せない
System.out.println("エンジン始動");
}
public void displayModel() {
// private メソッドやフィールドにアクセスするためには、同じクラス内で操作する必要がある
System.out.println("車のモデル: " + model);
}
}
3.protected
Java
public class Car {
protected String model; // 同一パッケージ内、およびサブクラスからアクセス可能
protected void startEngine() { // 同一パッケージ内、およびサブクラスから呼び出し可能
System.out.println("エンジン始動");
}
}
4.default
Java
public class Car {
String model; // アクセス修飾子なし = 同一パッケージ内からのみアクセス可能
void startEngine() { // アクセス修飾子なし = 同一パッケージ内からのみ呼び出し可能
System.out.println("エンジン始動");
}
}
まとめ
- public:どこからでもアクセスできる
- private:同一クラス内からのみアクセスできる
- protected:同一パッケージ内、およびサブクラスからアクセスできる
- default:同一パッケージ内からのみアクセスできる
この記事ではアクセス修飾子について説明しました。アクセス修飾子を使い分けることで、クラスのカプセル化を強化し、意図しないアクセスを防ぐことができます。