・   「Java言語」実習 第15回

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

パッケージの定義がある場合のアクセス制御について調べてみましょう。


・ 準備1:
今日の実習には、複数のディレクトリでの作業が必要となります。 通常の作業ディレクトリ(~/java2)の下に、 下記のコマンドを実行してディレクトリを用意します。


cd  java2
mkdir  accesstest
mkdir  accesstest2
mkdir  accesstest3

先週作成した bananaworldと合わせて下記のような構造にしてください。


-- ~ -+- java2 -+- accesstest
                +- accesstest2
                +- accesstest3
                +- bananaworld

・ 準備2:
今日の実習には、環境変数 CLASSPATHの明示的な設定が必要となります。 作業ディレクトリ(~/java2)とカレントディレクトリを 次のようにしてクラスパスに設定しておきなさい。 (この設定は、作業する端末エミュレータのウィンドウごとに必要です。)


CLASSPATH=~/java2:. ;  export CLASSPATH       #UNIXのKシェルの場合

CLASSPATH="Z:\java2\;." ;  export CLASSPATH   #Windowsのkshエミュレータの場合

set CLASSPATH=Z:\java2;.                      #WindowsのDOSウィンドウの場合


・ 基本課題1:「クラスによるアクセス制御」
privateによるアクセス制御の確認を行います。

  1. java2の作業ディレクトリの下に直接ソースファイル AccessTest.javaAccessedData.java を作成しなさい(教科書 P.86)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーの出た場所を調べ、その理由を考えなさい。
  4. AccessTest.javaでエラーになる行の先頭に // を付けて コメントアウトし、コンパイルしなさい。
  5. AccessTestを実行して実行結果を確認しなさい。

・ 基本課題2:「パッケージによるアクセス制御」
同じパッケージ内でのアクセス制御の確認を行います。

  1. ディレクトリ accesstestの下に移動しなさい。その中に AccessTest.javaAccessedData.java を作成しなさい(教科書 P.88,89)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーの出た場所を調べ、その理由を考えなさい。
  4. AccessTest.javaでエラーになる行の先頭に // を付けて コメントアウトし、コンパイルしなさい。
  5. AccessTestを実行して実行結果を確認しなさい。 実行時にはクラス名の前にパッケージ名を付けるのを忘れないこと。

・ 基本課題3:「パッケージによるアクセス制御(2)」
異なるパッケージからのアクセス制御の確認を行います。

  1. ディレクトリ accesstest2の下に移動しなさい。その中に AccessTest.java を作成しなさい(教科書 P.89)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーの出た場所を調べ、その理由を考えなさい。
  4. AccessTest.javaでエラーになる行の先頭に // を付けて コメントアウトし、コンパイルしなさい。
  5. AccessTestを実行して実行結果を確認しなさい。 実行時にはクラス名の前にパッケージ名を付けるのを忘れないこと。

・ 基本課題4:「継承によるアクセス制御」
protectedによるアクセス制御の確認を行います。

  1. ディレクトリ accesstest3の下に移動しなさい。その中に AccessTest.java を作成しなさい(教科書 P.90,91)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーの出た場所を調べ、その理由を考えなさい。
  4. AccessTest.javaでエラーになる行の先頭に // を付けて コメントアウトし、コンパイルしなさい。
  5. AccessTestを実行して実行結果を確認しなさい。 実行時にはクラス名の前にパッケージ名を付けるのを忘れないこと。

・ 基本課題5:「protectedフィールドへのアクセス」

  1. ディレクトリ java2に戻りなさい。
  2. サンプルソース ElephantTest.java を作成し、コンパイルを試みなさい(エラーになるはずです)。
  3. エラーがなく目的の動作(Elephant の energy値の値の表示)を 正しくできるようにプログラムを修正しなさい。 方法は1通りとは限りません。 ただし、ElephantやAnimalクラスの方を変更してはいけません。

・ 今週のレポート課題(学内用):
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。(Subjectは program17)

  1. 基本課題5のサンプルが最初のままだとエラーが発生する理由。
  2. 正しく動作するように書き換えた後のプログラムの内容。

・ 応用課題1:「innerクラスのアクセス制御」
innerクラスおよびそのメンバに対するアクセス制御の確認を行います。

  1. ディレクトリ ~/java に戻って作業してください。
    ソースファイル InnerAccessTest.java を作成しなさい(教科書 P.92)。
  2. InnerAccessTest.javaは問題なく コンパイルできることを確認しなさい。

・ 応用課題2:「innerクラスのアクセス制御(2)」
innerクラスおよびそのメンバに対するアクセス制御の確認を行います。

  1. ソースファイル InnerAccessTest2.java を作成しなさい(教科書 P.93)。
  2. InnerAccessTest2.javaは コンパイル時にエラーとなります。 どの行のどの部分がアクセス制御のルールに違反しているのかを確認しなさい。

実習の目次   今週の講義の内容