PROGRAMING2 report#5


課題
 講義資料オブジェクト指向プログラムJavaIの中のサンプルプログラムのポイントについて考察せよ。{〜12/05(Mon)} 各自オリジナルのサンプルプログラムのポイント(全ての講義内容を含んだ、1つのコード)を作成し考察せよ。


○ローカル変数とクラス変数

・1からnまでを表示するプログラム例

class Display { int n // クラス変数 void Disp() { int i; // ローカル変数 for (i = 1; i <= n; i++) System.out.print(I + " "); } class VarSample { public static void main(String args[]) { Display obj = new Display(); // クラスDisplayのオブジェクトobj生成 obj.n = 10; // オブジェクトobjの変数nに10を代入 obj.Disp(); // オブジェクトobjのDisp()実行 } }

実行結果

1 2 3 4 5 6 7 8 9 10

考察
・nはクラス変数、iはローカル変数である。
・new演算子でオブジェクトを生成している。


○コンストラクタ

・コンストラクタを用いた合計プログラム例

class Sum { int total; Sum() { // コンストラクタ 引数無し total = 0; } Sum(int x) { // コンストラクタ 引数 x total = x; } void add(int x) { total += x; } } class ConstrcSample { public static void main(String args[]) { Sum obj1 = new Sum(); // クラスSumのオブジェクトobj1生成 obj1.add(10); obj1.add(20); System.out.println("sum1 = " + obj1.total); Sum obj2 = new Sum(100); // クラスSumのオブジェクトobj2生成 obj2.add(10); obj2.add(20); System.out.println("sum2 = " + obj2.total); } }

実行結果

sum1 = 30 sum2 = 130

考察
・クラス名と同じ名前のメソッドをコンストラクタという。
・コンストラクタはオブジェクトの初期化処理に利用できる


○メソッドのオーバーロード

・メソッドのオーバーロードを行ったプログラム例

class Display { void Disp() { // メソッド Disp 引数なし System.out.println("Nothing"); } void Disp(int x) { // メソッド Disp 引数 x System.out.println(x); } void Disp(int x, int y) { // メソッド Disp 引数 x, y System.out.println(x + y); } } class OvldSample { public static void main(String args[]) { Display obj = new Display(); // クラスDisplayのオブジェクトobj生成 obj.Disp(); // オブジェクトobjのDisp()を実行 obj.Disp(1); // オブジェクトobjのDisp(1)を実行 obj.Disp(1, 2); // オブジェクトobjのDisp(1,2)を実行 } }

実行結果

Noting 1 3

考察
・メソッドのオーバーロードとは、クラス内に同じ名前のメソッドを定義すること
・メソッドのオーバーロードを行う場合は、引数の数や型が異なっていなければならない
・上のプログラムでは、同じ名前のメソッドの引数の数を変えて、出力を変化させている。

アクセス制限

・privateを用いて、変数の参照を不可にするプログラム例

class keisan { atatic int tanka; private float rate; // private変数rateの宣言 keisan() { // コンストラクタ tanka = 1000; rate = 0.05f; } init keisan(int kazu) { int kingaku; kingaku = (int)(tanka * kazu * (1.0 + rate)); return kingaku; } } class PrvSample { public static void main(String args[]) { keisan obj1 = new keisan(); int kazu = 3; int kingaku = obj1.keisan(kazu); System.out.println("tanka = " + obj1.tanka); System.out.println("kazu = " + kazu); System.out.println("kingaku = " + kingaku); // System.out.println("rate = " + obj1.rate); //private変数のため参照不可 } }

実行結果

tanka = 1000 kazu = 3 kingaku = 3150

考察
・変数を宣言するときの修飾子の中には、アクセス制御するものがある
・keisanクラスで宣言されているrateはprivate変数なので、PrvSampleクラスからはアクセスできない。
・今回もかなりむずかしかった。