Javaのアクセス修飾子について
Javaのアクセス修飾子について
Javaにおけるアクセス修飾子(アクセスコントロール)は、クラス、メソッド、フィールドのアクセスレベルを指定するために使用されます。 アクセス修飾子を適切に使用することで、カプセル化を強化し、コードのセキュリティと保守性を高めることができます。
1. アクセス修飾子の種類
Javaには、以下の4種類のアクセス修飾子があります:
- public: どこからでもアクセス可能
- protected: 同一パッケージ内またはサブクラスからアクセス可能
- private: 同一クラス内からのみアクセス可能
- default(指定なし): 同一パッケージ内からのみアクセス可能
2. public
public修飾子がついたメンバー(クラス、メソッド、フィールド)は、どこからでもアクセス可能です。最も広範囲にアクセスできるため、外部からのアクセスを許可する際に使用します。
public class MyClass {
public int number; // 他のクラスからアクセス可能
}
3. protected
protected修飾子は、同一パッケージ内または、サブクラスからアクセス可能です。外部クラスから直接アクセスできないようにしつつ、継承したクラスからのアクセスは許可する場合に使用します。
public class ParentClass {
protected int number; // サブクラスからアクセス可能
}
public class ChildClass extends ParentClass {
public void display() {
System.out.println(number); // 継承元のprotectedメンバーにアクセス可能
}
}
4. private
private修飾子は、同一クラス内からのみアクセス可能です。外部からアクセスできないように完全に制限するため、データの隠蔽やカプセル化を強化する際に使用します。
public class MyClass {
private int number; // 同一クラス内からのみアクセス可能
private void display() {
System.out.println(number);
}
}
5. default(アクセス修飾子なし)
アクセス修飾子を指定しない場合、デフォルトでdefaultとなり、同一パッケージ内からのみアクセス可能になります。外部パッケージからのアクセスはできません。
class MyClass { // default修飾子、同一パッケージ内からのみアクセス可能
int number;
void display() {
System.out.println(number);
}
}
6. アクセス修飾子の組み合わせ
Javaでは、複数のアクセス修飾子を組み合わせて使用することはできません。例えば、private publicのような組み合わせは無効です。
7. クラスにおけるアクセス修飾子
クラス自体にもアクセス修飾子を付けることができます。クラスに対するアクセス修飾子は、外部クラスからそのクラスをインスタンス化する際に影響します。
publicクラスはどこからでもインスタンス化可能defaultクラス(修飾子なし)は、同一パッケージ内からのみインスタンス化可能privateクラスはインスタンス化不可能(通常は内部クラスに使用)
8. まとめ
アクセス修飾子は、Javaプログラムにおいて重要な役割を果たします。public、protected、private、およびデフォルトのアクセス制御を使い分けることで、クラスやメソッドの可視性を適切に制御できます。
カプセル化を適切に行うために、アクセス修飾子を効果的に使用することが大切です。