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
、およびデフォルトのアクセス制御を使い分けることで、クラスやメソッドの可視性を適切に制御できます。
カプセル化を適切に行うために、アクセス修飾子を効果的に使用することが大切です。