アクセス修飾子 はクラスメンバーの可視性を制御し、誰が読み取ったり呼び出したりできるかを制限することでカプセル化を強制します。
アクセス修飾子 はクラスメンバーの可視性を制御し、誰が読み取ったり呼び出したりできるかを制限することでカプセル化を強制します。
| 修飾子 | アクセス可能な場所 |
|---|
public | どこからでも |
protected | クラスとそのサブクラス |
private | 宣言されたクラス内のみ |
public class Employee {
private double salary; // internal — only Employee touches it
protected String department; // subclasses may use it
public String name; // open to all
public double getSalary() { // controlled, public read access
return salary;
}
}
salary は private なので、外部のコードは它を改ざんできません。public getterだけが唯一のアクセス手段です。
class Demo:
def __init__(self):
self.public = 1
self._protected = 2 # convention only ("don't touch")
self.__private = 3 # name-mangled to _Demo__private
Python には強制的な private はなく、命名規則に依存しています。Java/C# はコンパイル時に修飾子を強制します。また Java には package-private(デフォルト、キーワードなし)があります。
すべてを public にするとカプセル化が台無しになります。デフォルトでは 最も制限的な レベルを使用し、実際の必要性が生じた場合のみ広げてください。
アクセス修飾子は、カプセル化を原則からコンパイラが検査する強制的なルールに変える具体的なツールです。
小さなパブリック表面積は、より少ないコードが内部に依存することを意味するため、呼び出し元を破壊することなく自由にリファクタリングできます。