26.
アクセス修飾子
アクセス修飾子
アクセス修飾子とは
アクセス修飾子はメソッドやプロパティに対して、外部ファイルからのアクセス範囲を限定することができます。
アクセス修飾子の目的
プログラミングで予期しないエラーを発生させないために、アクセス範囲を最小限に限定することは大切です。データを簡単に変更できないようにして、バグを防止できるという考え方です。
アクセス修飾子の種類
アクセス修飾子は「public」「protected」「private」「デフォルト(なし)」があります。
アクセス修飾子一覧
修飾子 | アクセス |
---|---|
public | すべてのクラス |
protected | 現在のクラスとサブクラス |
デフォルト(なし) | 現在のクラスと同じパッケージのクラス |
private | 現在のクラスのみ |
アクセスの範囲
修飾子、パッケージ、継承など組み合わせによってアクセス範囲が異なります。
アクセスの範囲一覧
状態 | public | protected | デフォルト(なし) | private |
---|---|---|---|---|
同じクラス | ○ | ○ | ○ | ○ |
同じパッケージの他のクラス | ○ | ○ | ○ | × |
別パッケージのサブクラス | ○ | ○ | × | × |
別パッケージのサブクラス以外のクラス | ○ | × | × | × |
同じパッケージで「private」の場合
プロパティのアクセス修飾子を「private」にした例です。
UserBean.java
外部からアクセスできない
て、外部ファイルからデータアクセスできないようになります。
App.java

ファイルの用意
ファイル構成
ファイル作成
「UserBean」クラスを作成して「email」プロパティを「public」で定義します。
entity.UserBean
UserBean.java
sns.PrimeUser
「UserBean」をスーパークラスとした「PrimeUser」を作成し、showEmail() で「email」にアクセスします。
PrimeUser.java
sns.App
「sns」パッケージにメインプログラムを作成し、「UserBean」の「email」にアクセスします。
App.java
sns.App
「sns.entity」パッケージに同様のメインプログラムを作成します。
sns.entity.App.java
public
アクセス修飾子を「public」は、すべての外部ファイルからアクセス可能になります。

サブクラスの場合
サブクラスからでもアクセスできます。

private
外部ファイルのアクセスの場合
「UserBean」プロパティのアクセス修飾子を「private」に変更します。
UserBean.java
外部ファイルからアクセスできない
「email」プロパティにアクセスすると「private」になっているため、すべての外部ファイルからアクセスできません。

protected
「UserBean」プロパティのアクセス修飾子を「protected」に変更します。
UserBean.java
パッケージが違う場合
「sns.entity.UserBean」と「sns.App」のパッケージが違うのでアクセスできません。

違うパッケージの継承の場合
「shop.entity.UserBean」と「shop.PrimeUser」のパッケージが違い、継承している場合はアクセスできます。

パッケージが同じの場合
「shop.entity.App.java」は、同じパッケージなのでアクセスできます。

デフォルト
修飾子をつけない(デフォルト)場合です。
UserBean.java
同じパッケージ
同じパッケージはアクセスできる
修飾子なしの場合、同じパッケージのクラスファイルであればアクセスできます。
違うパッケージファイル
違うパッケージファイルからはアクセスできない
「protected」と同様、外部ファイルと違うパッケージのアクセスはできません。
違うパッケージのサブクラスの場合
継承してもアクセスできない
違うパッケージファイルの場合、継承してアクセスできません。
演習
問題1
すべての外部ファイルからアクセスできるアクセス修飾子はどれですか?
1)public
2)private
3)protected
4)デフォルト
問題2
自分のクラス以外の外部ファイルからアクセスを拒否するアクセス修飾子はどれですか?
1)public
2)private
3)protected
4)デフォルト
問題2
デフォルトのアクセス修飾子で、正しいのはどれですか?
1)public String name;
2)private String name;
3)protected String name;
4)String name;