プログラム内のフィールドやメソッドは自由に使わせないで、制限を持たせてデータやプログラムを保護することは重要である。JAVAにはそれを行う仕組みが言語の中にある。
特にクラス内のデータとメソッドの保護に関しては、カプセル化という概念で、クラスのメンバー(フィールドとメソッド)をクラス内に閉じ込めて(カプセル化)して保護できる。
カプセル化:
フィールド、メソッドをまとめてクラス入れる。保護したいメンバーをprivate(メンバーやクラスに付ける修飾子)にして勝手にアクセスできないようにする。メンバーはアクセスしないと意味がない、しかしできるだけ保護したいので、特定のメソッドでしかアクセスできないようにしておく。そのメソッドをアクセスメソッドと呼ぶ。
通常以下のような方針でメンバーに修飾子を付ける。
フィールドーーーprivate
メソッド ーーーpublic
privateはclass内以外からのアクセスを不可にするのでフィールドは保護できる。
publicは他の条件が許せばアクセス可を意味する。しかし、できるだけprivateにしてメソッドも保護する方がよいことは言うまでもない。従って、以下のようにしてカプセル化する。
フィールドーーーーーーprivate
アクセスメソッドーーーpublic
その他のメソッドーー-private
図Proo6_1_srcはそのようにして作ったプログラム例である。末尾に実行結果を付けてある。
3,4行 フィールドをprivateにしてクラス内から以外はアクセス不可としている。クラス内からアクセスできないメンバーはない。
5から7行 set_Bookメソッドをprivateにしている。このメソッドはコンストラクタBookだけから使うことにしているからである。クラス内のメソッドからであればprivateメソッドも使える。
8から10行 displayメソッドはpublicにして、クラス外からも使えるようにしてある。アクセスメソッドである。
11から13行 コンストラクタBookはこのクラス唯一のコンストラクタであるからクラス外から使えないといけないのでpublicにしてある。アクセスメソッドである。
17行 コンストラクタBookがクラス外から使用できるでいる。
18行 displayメソッドで表示している。これもpublicである。
今回は主にクラスのメンバーに付ける修飾子について説明しました。アクセス制御については次回に更に解説します。
以下にソースを貼り付けます/*アクセス制限とカプセル化*/ class Book { private String title; private int page; private void set_Book(String title,int page){ this.title=title;this.page=page; } public void display(){ System.out.println("title="+title+", page="+page); } public Book(String title, int page){ set_Book(title,page); } } class Proo6_1{ public static void main(String[] args){ Book a=new Book("Introduction to Java",500); a.display(); } } /* title=Introduction to Java, page=500 */