プログラムをコンパイルした際に、「~は不可視です」や「~は~でprivateアクセスされています」というエラーメッセージが表示される原因と対処についてです。
原因
カプセル化により、アクセス権限がないクラス、フィールド、メソッドを利用しようとしているためです。
オブジェクト指向のメイン機能の一つであるカプセル化が働いています。
対処
利用しようとしているクラスやメンバのアクセス修飾が正しいことを確認しましょう。
もし、privateフィールドへのアクセスが必要な場合は、フィールドのアクセス修飾をpublicなどへ緩和するのではなく、getterやsetterが既に存在しないか確認し、なければ作成することを考えましょう。
ポイント
カプセル化
カプセル化とは、オブジェクトの情報をカプセルのようにまとめ、中身を隠蔽したままオブジェクトを利用することです。
クラスをカプセル化することにより、クラス毎の独立性が高まり、想定しない操作をされないよう制御することが可能になります。
具体的には、メソッドやフィールドのアクセスを外部から制限することや、継承したスーパークラスの型の変数にサブクラスのオブジェクトを代入してサブクラスの型を隠蔽することです。
クラスに使用するアクセス修飾子
アクセス修飾子 | 説明 |
public | どこからでもアクセス可能です。 |
無指定 | 同パッケージ内からのアクセスのみ可能です。 |
メンバ(フィールド・メソッド)に使用するアクセス修飾子
アクセス修飾子 | 説明 |
public | どこからでもアクセス可能です。 |
protected | 同パッケージ内とサブクラスからアクセス可能です。 |
無指定 | 同パッケージ内からのアクセスのみ可能です。 |
private | 同クラス内からのアクセスのみ可能です。 |
コメント