クラスの基本
クラスとは②
コンストラクタ
メソッドとよく似た形をしたコンストラクタ(constructor)の役割は、クラスのインスタンスを初期化することです。コンストラクタが呼び出されるのは、プログラムの流れが以下の宣言文を通過して、式が評価される際です。
Account2 first = new Account2("山田太郎", "12345", 1000);
Account2 second = new Account2("山田花子", "67891", 200);
以下の図が示すように、個々のインスタンスに対して、専用のコンストラクタが存在します。コンストラクタを定義しないクラスには、引数を受け取らず、その本体が空であるデフォルトコンストラクタ(default constructor)が自動的に作られます。
メソッド
クラス Account2 のメソッドを以下に再掲します。
//口座名義を調べる
String getName(){
return name;
}
//口座番号を調べる
String getNo(){
return no;
}
//預金残高を調べる
long getBalance(){
return balance;
}
//k円預ける
void deposit(long k){
balance += k;
}
//k円おろす
void withdraw(long k){
balance -= k;
}
- getName…口座名義を調べるためのメソッドです。フィールド name の値を String型で返します。
- gerNo…口座番号を調べるためのメソッドです。フィールド no の値を String型で返します。
- getBlance…預金残高を調べるためのメソッドです。フィールド balance の値を long型で返します。
- deposit…お金を預けるためのメソッドです。預金残高が k 円だけ増えることになります。
- withdraw…お金をおろすためのメソッドです。預金残高が k 円だけ減ることになります。
static を付けずに宣言されたメソッドは、そのクラスの個々のインスタンスごとに作られます。また、このメソッドは、インスタンスメソッド(instance method)と呼ばれます。インスタンスメソッドを呼び出す例は以下のようになります。
first.getBalance() //山田太郎の預金残高を調べる
first.withdraw(200) //山田太郎の口座から200円下す
second.deposit(100) //山田花子の口座に100円預ける
フィールドをアクセスする場合と同様にメンバアクセス演算子「.」を利用します。クラスの外部から直接アクセスできないデータも、メソッドを通じる事で間接的にアクセスが可能です。図で表すと以下のようになります。
メソッドとメッセージ
オブジェクト指向プログラミング(object oriental programming)の世界では、インスタンスメソッドを呼び出すことを、次のように表現します。
オブジェクトに「メッセージを送る」
これを行うことで、能動的に意思決定を行って、返却処理を行います。
クラスとオブジェクト
一般にメソッドは、フィールドの値をもとに処理を行って、必要に応じてフィールドの値を更新します。フィールドを非公開として外部から保護した上でメソッドとフィールドをうまく関係させることをカプセル化(encapsulation)といいます。
今までのプログラムは、実質的にはメソッドの集合であり、クラスはメソッドを包むだけの存在でした。本来はクラスの集合としてJavaプログラムを組みます。そうすることで、Javaのパワーを発揮できます。