welcome: please sign in

2010-11-06 05:30:33時点のリビジョン47

メッセージを消す
location: メソッド

メソッド

クラスのもつ機能を定義したものをメソッドといいます。

メソッドはオブジェクトに対する(オブジェクトを利用した)処理を記述したものとも言えます。

Itemクラスのメソッドを定義してみましょう。

前回作成したプログラムはこのようでした。

22~24行目に各変数の指しているオブジェクトの値を表示するためのprint文があります。
この部分をメソッドを使って書き直します。


メソッドの定義

Item.javaにshowという名前のメソッドを追加します。

showメソッドの定義は4行で書けます。

このメソッドは指定されたインスタンス内の変数の値を表示するものです。
値を返さないので型はvoidです。

これを属性の定義の前に追加します。


メソッドの利用

値を返さないメソッドの使い方は

です。

のように、インスタンスとメソッド名をピリオドでつなぎ後ろに括弧を書きます。

void(値を返さない)型のメソッドの場合

のように解釈すればよい。

この場合は「インスタンスaに対してshow()を行う」と読めます。

最初のプログラムでprint文で書いていたところをすべて、この形に書き直します。


メソッドの動作

メソッドが

として呼び出されると、このときのインスタンスの値が this に対応付けられてから、 メソッド本体が実行されます。

27行目の

ではaの値がthisに渡されて実行されるので、aが参照しているItemインスタンス内の変数の値が表示されます。

28行目の

ではbの値がthisに渡されて実行されるので、bが参照しているDrinkインスタンス内の3つの変数の値が表示されます。


値を修正するメソッド

メソッド内で、thisが指しているオブジェクト内の変数の値を修正することもできます。

例としてsetYoryoメソッドを示します。

このメソッドは引数をとるので、呼び出し側でも引数の指定が必要です。

mainメソッド内で

を行うと、 bの指しているオブジェクト内の変数yoryoの値が250に修正されます。


値を返すメソッド

値を返すメソッドは次のように記述します

値を返すメソッドは計算式の中で使えます。 呼び出し方は同じです。


setYoryo(), getYoryo()

こんなメソッドを使わなくても、オブジェクト内の変数を直接参照すれば同じ処理が簡単に書けます。

小さなプログラムの場合はそれでかまいませんが、 大きなプログラムや堅牢性が要求される場合には、この形のメソッドが多用されます。

値の参照や修正をメソッドを使って行うようにすれば、 オブジェクトの状態をすべてクラス内で管理できるからです。


this

thisはキーワードです。

あいまいさが無いときはthis.を省略することができます。

このページで示したメソッドではthis.がなくてもどの変数を指しているか明らかなので省略して

のように書けます。

thisを使って次のように書くこともしばしば行われます。

yoryoという同じ名前がありますがthisを使うことで区別ができます。


メソッドの継承

スーパークラスで定義されたメソッドはサブクラスでも利用できます。

例えば、スーパークラスであるItemクラスでメソッドdispName()が定義されている時を考えます。

Drinkクラスのインスタンスに対してdispName()メソッドの呼び出しが行われたらどうなるでしょうか。

サブクラスであるDrinkクラスでメソッドdispName()が定義されているかどうかで処理が異なります。

(1)DrinkクラスでメソッドdispName()が定義されていないとき

(2)DrinkクラスでメソッドdispName()が定義されているとき

スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することもできます。 この場合サブクラスで定義したメソッドが優先されます。(2)の場合です。

これをメソッドのオーバーライドといいます。

どのクラスのメソッドが実行されるのか

  1. インスタンスの属するクラスに対応するメソッドがあれば、それを実行する。
  2. 無いときはスーパークラスの同じ名前のメソッドを探して、それを実行する。
  3. 見つからないときは、親の親の親...と順に探します。
  4. どうしても見つからないときはエラーになります。