コンストラクタについて
この他にも、もう1つ重要なものが登場しています。それは「コンストラクタ」というものです。メソッドは、必ず「戻値」の指定を記述する必要がありました。「public void ~」というような具合です。ところが、このクラスをよく見ると、戻値が指定されていないものが1つあります。
public Shisan(){ ……略…… }
こういうものです。本来なら、public void Shisan()というように定義するはずです。が、ここでは、戻値を示すものがありません。publicの後に、いきなりShisanというメソッド名がきています。
実は、これは通常のクラスではありません。「コンストラクタ」と呼ばれる、特別な働きを持つメソッドです。コンストラクタは、「インスタンスを生成するとき、自動的に呼び出され、インスタンスの初期化処理などを行う」働きを持ちます。new Shisan()というようにインスタンスを作成すると、最初にこのコンストラクタが実行され、初期化作業を行うのです。
コンストラクタは、ただメソッドを書くだけでは認識されません。以下のような形で記述されたものだけがコンストラクタと認められます。
- 返値の指定がないこと。
- クラス名と同じ名前であること。
これらの条件を満たせば、それはコンストラクタとなります。コンストラクタが呼び出されるのは、newでインスタンスを作成するときだけです。逆に、プログラマがプログラムの中からコンストラクタメソッドを呼び出すことはできません。プログラマができるのは、あくまで「クラスをnewすること」だけです。コンストラクタは「Javaが自動的に呼び出し実行する」ものなのです。
資産クラスを利用してみる
では、作成した資産クラスを使って、資産の計算と報告をしてみましょう。ざっとこんな感じになるでしょう。
public class Sample { public static void main(String[] args) { Shisan shisan = new Shisan(); // 預金を追加 shisan.yokin.name = "田中銀行"; shisan.yokin(1200000,Shisan_Shurui.YOKIN); // 外貨預金を追加 shisan.gaika.name = "ロンドン=パリ銀行"; shisan.gaika.syurui = "ユーロ"; shisan.gaika.rate = 160; shisan.yokin(15000,Shisan_Shurui.GAIKA); // 現金を追加 shisan.yokin(200000,Shisan_Shurui.GENKIN); // 土地を追加 shisan.tochi_kounyu(60,85000); // 結果出力 shisan.printShisan(); } }

いかがですか? 先に、各クラスをバラバラに利用していたときと比べると、格段にすっきりとしたソースコードになっていると思いませんか? Shisanインスタンスを作成し、後は必要なフィールドを設定したり、メソッドを呼び出していくだけです。すべて資産の情報を設定したら、printShisanを呼び出すだけで現在の資産状況がレポートされます。
なぜ、こんなに使いやすくなったのか? それは、「面倒くさい部分を全部Shisanクラスにまとめたから」でしょう。要するに、ソースコード全体としては、それほど大きな違いはありません。問題は「どこに、どういう部分を入れてクラス化したか」ということです。
まとめ
先ほどの「クラスのバラバラ利用」と、今回の「資産クラスを使った利用」では、決定的な違いが1つあります。それは、「クラスが完成してしまえば、クラスの中がどうなっているかなど知らなくてもいい」という点です。
バラバラに利用する場合、1つ1つのクラスの使い方を知っておかなければいけませんし、手作業で情報を取り出し出力するなどしなければいけません。が、部品となるクラスが完成してしまえば、もうそのクラスの中のソースコードは誰も見なくていいのです。知らなくていいのです。ただ「こういうメソッド、フィールドがあり、こう利用する」という使い方だけ知っていればよいのです。中で行っていることなど知らなくても、yokinメソッドを呼び出せば的確なところに預金を預けておいてくれる。中身など知らなくても、printShisanを呼び出せば自動的にレポートが出力される。
「クラスを使ってプログラミングする」ということの最大の利点、それはまさにこの点でしょう。すなわち、「クラスが完成してしまえば、もうその中身など知らずに誰もが利用できるようになる」ということ。Shisanクラスが完成すれば、後は誰がいつ利用する場合も、書くべき部分は先ほどのmainメソッドの部分だけです。それ以外の部分は、何がどうなっているかなど誰も知らなくていいのです。
クラスを使ってプログラミングするということがどういうことが、少しは実感できたでしょうか。もちろん、今回作ったのは、ごくごく単純なサンプル。本格的なプログラミングともなれば、いくらクラスを使ってもこんなに簡単にはいきません。が、その基本は同じです。どんなに複雑なものであれ、そのクラスが完成すれば、もう誰も中身を知らなくとも使うことができる。作ったクラスは、いつでもどこでも再利用できる。――いかがです。「クラスとしてプログラムを作る」ことが楽しくなってきませんか?
