メソッド

メソッドとは(復習)

  • メソッドとはC言語の関数のような、「処理がまとめられたもの」である。
  • メソッドはクラスの中に作られる。
  • メソッドを実行するときに値を渡すことができる。その値のことを引数という。
  • メソッド内では、引数以外にも、インスタンスにあるフィールドも使うことができる。もちろんメソッド内で作った変数も使える。
  • メソッドの処理結果(値)を呼び出し元に返すことができる。その値を戻り値(返り値)という。

メソッドの例

Bodyクラスを題材にメソッドの実装例を見ていこう。実装したBodyの利用例も参照すること。

引数がなくて返り値がある

returnで返り値を指定する。

引数が1つで返り値がない

返り値がない場合は返り値の型の代わりに「void」と書く。

引数が2つで返り値がない

引数が複数の場合は「,」で区切る。

引数の名前がフィールドとかぶる場合、単にその名前を書くと引数の方が使われる。このような状況でフィールドの方を使うには「this.フィールド名」とする(教科書P.98)。

コンストラクタ

コンストラクタは「インスタンス化のときに実行されるメソッド」である。

例えば、これまではインスタンスを作成した後にフィールドに値を代入していたが、インスタンス化と同時に値を代入できるようなコンストラクタを定義してみよう。

コンストラクタの定義の注意点(普通のメソッドとの違い)は以下の2点。

  • コンストラクタの名前はクラス名と同じにする。自由につけられるわけではない。言い換えると、クラス名と同じ名前のメソッドはコンストラクタである。
  • コンストラクタには返り値がないので、返り値の型は記述しない。voidも書いてはいけない。

このコンストラクタを使ってインスタンスを作るには次のようにする。

ただし、この状態(コンストラクタを1つ定義した状態)でコンパイルしようとすると、Bodyクラスを呼び出しているクラス(Lesson03やLesson04)がエラーになってしまう。これは、「new Body()」に対応したコンストラクタが用意されていないからである。

「new Body()」に対応したコンストラクタも定義しよう。ここでは、乱数で身長と体重をセットすることにする。

これで、「new Body()」も使えるようになった。

そもそも、これまではなぜコンストラクタを定義していないのに「new Body()」でインスタンス化できていたのだろうか?それは、コンストラクタを1つも定義しない場合は、デフォルトコンストラクタという何もしないコンストラクタが生成されていたからである(教科書P.76)。デフォルトコンストラクタは、「コンストラクタを1つも記述しない場合」にだけ生成されることに注意すること。