カテゴリー
Java

Java(Step8-1-2)

クラスの基本

クラスとは②

コンストラクタ

メソッドとよく似た形をしたコンストラクタ(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のパワーを発揮できます。