4.5 main メソッド、クラス、引数と返却値

プログラム

B4_5

プログラムの説明

mainメソッドとクラス

プログラムB4_2を見てください。このmainメソッドでTeacherオブジェクトが生成(インスタンス化)されています。

確認になりますが、クラスのオブジェクトを使用するにはクラスのコンストラクタ(クラス名と同じ特殊なメソッド)を呼び出しオブジェクトを生成する必要があります。

Teacherクラスのソースコードを見てください。クラスはオブジェクトの設計図でした。

クラスは基本的に以下の三つの宣言から成り立っています。

  • クラスの宣言
  • 状態(インスタンス変数など)の宣言
  • 振る舞い(メソッド)の宣言

クラス宣言のブロックで状態の宣言と振る舞いの宣言が行われます。ただし、状態の宣言の順番やメソッドの宣言の順番には意味がありません。

つまり、Teacherクラス宣言のブロックでは実行が上から下に動作してはいません。

もう一度、プログラムB4_2を見てください。mainメソッドの命令の各行に番号が付いています。各行の意味は

  1. Teacherクラスの変数の宣言になります。宣言と同時にTeacherオブジェクトが生成され、変数名teacherでラベリングされています。ただし、生成時にコンストラクタに引数としてStringオブジェクトが二つ渡されています。
  2. 変数名teacherでラベリングしたオブジェクトにsetSalaryメッセージを送ります。この時、引数としてint(整数)型が渡されています。
  3. 変数名teacherでラベリングしたオブジェクトにgetSalaryメッセージを送ります。引数はありませんが、返却値として状態のthis.salaryの値が返却されます。

となります。

引数と返却値

引数とはメソッドに渡される値(オブジェクト)で、返却値とはメソッドの部分に返却される値(オブジェクト)となります。

それでは、Teacherクラスのソースコードを見てください。各mainメソッドメッセージがどのようにTeacherオブジェクトに伝えられるかを説明します。

まず、B4_2のTeahcerオブジェクトに対するメッセージの順番がTeacherクラスのソースコードの上から下に動作していないことが改めてわかります。

オブジェクト側からは以下のように振る舞います。

  1. コンストラクタが呼び出されます。返却値としてTeacherオブジェクトが返却されます。引数として文字列が二つ渡されます。
    コンストラクタのブロックでオブジェクトの状態であるthis.nameとthis.idに引数で渡されたnameとidの値(オブジェクト)を代入します。
  2. setSalaryメソッドが呼び出されます。引数としてint(整数)型の値が渡されます。返却値はありません。
    setSalaryのブロックでオブジェクトの状態であるthis.salaryに引数で渡されたsalaryの値を代入します
  3. getSalaryメソッドが呼び出されます。引数はありませんが、返却値として状態のthis.salaryを呼び出し元に返却します。

getSalaryのブロックでは返却するthis.salaryをreturnキーワードで指定します。