Javaの「~は不可視です」エラーの原因と対処

IT

プログラムをコンパイルした際に、「~は不可視です」「~は~でprivateアクセスされています」というエラーメッセージが表示される原因と対処についてです。

原因

カプセル化により、アクセス権限がないクラス、フィールド、メソッドを利用しようとしているためです。

オブジェクト指向のメイン機能の一つであるカプセル化が働いています。

対処

利用しようとしているクラスやメンバのアクセス修飾が正しいことを確認しましょう。

もし、privateフィールドへのアクセスが必要な場合は、フィールドのアクセス修飾をpublicなどへ緩和するのではなく、getterやsetterが既に存在しないか確認し、なければ作成することを考えましょう。

ポイント

カプセル化

カプセル化とは、オブジェクトの情報をカプセルのようにまとめ、中身を隠蔽したままオブジェクトを利用することです。

クラスをカプセル化することにより、クラス毎の独立性が高まり、想定しない操作をされないよう制御することが可能になります。

具体的には、メソッドやフィールドのアクセスを外部から制限することや、継承したスーパークラスの型の変数にサブクラスのオブジェクトを代入してサブクラスの型を隠蔽することです。

クラスに使用するアクセス修飾子

アクセス修飾子説明
publicどこからでもアクセス可能です。
無指定同パッケージ内からのアクセスのみ可能です。

メンバ(フィールド・メソッド)に使用するアクセス修飾子

アクセス修飾子説明
publicどこからでもアクセス可能です。
protected同パッケージ内とサブクラスからアクセス可能です。
無指定同パッケージ内からのアクセスのみ可能です。
private同クラス内からのアクセスのみ可能です。

getter、setterについて

フィールドにアクセス制限を「private」にすることで、他のプログラムによる直接の変更を禁止できるようになります。

しかし、同時に値の取得もできなくなってしまうので、フィールドの値を取得するための「getter」メソッドや値を変更するための「setter」メソッドを必要に応じて作成して、他のプログラムから参照できるようにします。

<スポンサードリンク>


コメント

タイトルとURLをコピーしました