前回に続きクラスにメソッドを追加します。その前にざっと使う用語を振り返っておきます。
クラスとインスタンスとメソッドのまとめ
世の中の現象がプログラム上で表現されたものをオブジェクトと言います。オブジェクトを表現する雛形またはテンプレートでクラスと呼び、クラスからつくられた個々の実例をインスタンスと呼びます。
古代ギリシアのプラトンという哲学者が唱えたイデア論というものがあります。馬には個々の馬というものと特に個別のものをささなくても人々が理解している抽象的な「馬」というものがある、といった内容です。大きい馬や速い馬や太った馬など個々にいろいろな違いはあっても「馬」であることは理解できます。
Javaで言えばこの抽象的な「馬」がクラスにあたり、個々の馬はインスタンスになります。「馬」のコンストラクタがあるとしてそれを呼び出すことによってインスタンスを作成するのです。おそらくコンストラクタには馬の大きさや体重や速さなど個々のインスタンスを利用するにあたって必要な情報を引数として要求するでしょう。
また馬のほとんどの動作、走る、食べる、いななくなどは「馬」であれば行う動作はクラスに定義されます。この動作をメソッドと呼びます。クラスにメソッドを定義しておけば個々のインスタンスでこれを利用することができます。またコンストラクタで指定された値をもとに個々のインスタンスでの動作を変えることもできます。コンストラクタの引数で馬の速さを指定していれば走る時の動作を与えられた速さでインスタンスごとに変更することができます。
メソッドを定義する
前回の銀行口座のクラスを再度使います。銀行口座の内容を出力するために以下のような処理を実行していました。
System.out.println( "口座番号" + my_account.account_number + " 名義人" + my_account.account_name + "の口座の残高は " + my_account.amount + "円です。");
出力内容は以下のようなものでした。
口座番号01234567 名義人口座太郎の口座の残高は 1000円です。
ただし銀行口座のインスタンスによって出力される口座番号や名義人や残高は異なるはずです。メソッドを作成するにあたりその内容を整理します。
- メソッド名はprintとする
- 処理はインスタンスのフィールド変数を参照しながら標準出力に出力するものとする
- このメソッドを実行するにあたって外部からの引数は必要ない
- このメソッドを実行した結果を外部に返す必要はないので戻り値はvoidとする
およそこのくらいが決まったらメソッドを定義します。メソッドなしで実行している上のコードをそのまま流用します。
void print(){ System.out.println( "口座番号" + account_number + " 名義人" + account_name + "の口座の残高は " + amount + "円です。"); }
元のコードはインスタンスの外部で出力していましたが今回はインスタンスの内部で出力するのでインスタンスを特定するmy_accountは必要ありません。
ではこのprintメソッドを呼び出してみましょう。
public static void main(String[] args){ BankAccount my_account = new BankAccount("0123456", "口座太郎", 1000); my_account.print(); }
出力内容は上と同じです。BankAccountのインスタンス作成時の口座番号や名義人、残高を変更すればprintメソッドで出力される内容も変更されます。
public static void main(String[] args){ BankAccount my_account = new BankAccount("9999999", "金融花子", 1500); my_account.print(); }
口座番号9999999 名義人金融花子の口座の残高は 1500円です。
ソースコード
最後にソースコード全体を載せておきます。インスタンスの値を変えて出力が変わることを確認してください。
class BankAccount { String account_number; String account_name; int amount; BankAccount(String account_number, String account_name, int amount){ this.account_number = account_number; this.account_name = account_name; this.amount = amount; } void print(){ System.out.println( "口座番号" + account_number + " 名義人" + account_name + "の口座の残高は " + amount + "円です。"); } public static void main(String[] args){ BankAccount my_account = new BankAccount("9999999", "金融花子", 1500); my_account.print(); } }