パッケージとアクセス制御

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

package文とファイルの位置

パッケージ化する事をソースプログラムで宣言します。
此の宣言は、コメント以外の全ての文より先に書きます。

package フォルダ名;
例: package original; //此のクラスはOriginalパッケージ

パッケージ化を宣言する文をpackage文と言います。

コンパイル

先ず、パッケージ内の自作クラスをコンパイルします。
同じパッケージ内のクラスを使用しているソースファイルをコンパイルする時は、1つ上のクラスにクラスパスを設定してコンパイルします。
クラスパスの設定はコンパイルのコマンド「javac」の「-classpath」スイッチを使って以下の様に行います。

javac -classpath クラスパスを設定するフォルダ名 ソースファイル名

クラスパスを設定するフォルダ名は、相対パスを利用すると便利です。
相対パスでは「..」の様に書くので、コンパイルのコマンドは以下の例の様になります。

例: javac -classpath .. TwoPointColor.java

import文やpackage文で指定するフォルダ名は、クラスパスに対する相対パスで指定する為、逆にパッケージの1つ上のフォルダをクラスパスに指定すれば良いのです。
一方、目玉を描くプログラム「MedamaCA4.java」は、Originalパッケージクラスに置かれている「MedamaRectangle.class」を使っています。
其処で、「MedamaCA4.java」プログラムの先頭に、

import original.MedamaRectangle;

又は、

import original.*;

のどちらかを追加します。
MedamaCA4.java」は、今迄行って来た通りにコンパイルします。

実行

コンパイルの次は実行です。
家のプログラムはGUIなので、実行するにはMS-DOSに、

java クラス名

と打ち込みます。
MS-DOSのカレントフォルダが、

C:\javasrc

で有る時、実行したいクラス「HouseCA5.class」はカレントフォルダではなく、其の下の「original」パッケージに有るので、以下の様になります。

C:\javasrc>Java original/HouseCA5

目玉の方はアプレットですから、従来通り、

C:\javasrc>appletviewer MedamaCA4.java

とするか、HTMLを用意してブラウザを起動します。
メンバ変数の中では、他のクラスから直接アクセスして欲しくないデータや、他のクラスから呼び出して欲しくないデータが有ります。
此処では、他のクラスからのアクセスを制限して、データを保護する方法を学びます。
他のクラスからのアクセスを制限する事をアクセス制御と言います。

4つのアクセスレベル

フィールドやメソッドへのアクセスを制限するアクセス指定子には、次の4つが有ります。
下の表はアクセス指定子が付いたフィールドやメソッドに対し、何処からのアクセスが許されるかを表した物です。

アクセス指定子の一覧

アクセス指定子 クラス内 パッケージ内 サブクラス内 全体
public 可能 可能 可能 可能
protected 可能 可能 可能 不能
指定無し 可能 可能 不能 不能
private 可能 不能 不能 不能

public

此のレベルのフィールドは、何処からもアクセス出来ます。
又メソッドは、何処からも呼び出せます。

protected

此のレベルのフィールドは、同じクラス内及び其れを継承したサブクラスか、又は同じパッケージに所属するクラスで有ればアクセス出来ます。
メソッドも同様です。

指定無し

此のレベルのフィールドは、同じクラス内及び同じパッケージに所属するクラスで有ればアクセス出来ます。
メソッドも同様です。

private

「private」の付いたフィールドは外部から完全に遮断される為、同じクラスのメソッドからしかアクセス出来ません。
此のフィールドのデータを取得したり書き換えたりするには、「public」のゲッタメソッドとセッタメソッドが必要です。
他のクラスからデータを遮断して保護する事をデータの隠蔽と言います。

ソース ダウンロード
HouseCA5.java TwoPoints04.zip
MedamaCA4.java Medama08.zip MedamaCA4.html

戻る