welcome: please sign in

2009-10-23 12:51:07時点のリビジョン29

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

メソッド

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

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

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

クラス図には次の4つの機能(メソッド)が書かれています。

クラス名と同じメソッドはコンストラクタと呼ばれ、別の機能を持ちます。次ページで解説。

このページでは普通のメソッドについて解説します。


メソッドの定義

Drinkクラスのメソッドとして disp を定義しました。


メソッドの使い方

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

です。

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

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

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

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


メソッドの動作

メソッドが

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

25行目の

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

26行目の

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


値を修正するメソッド

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

setYoryoメソッドだけを示します。 dispメソッドと同様の位置に追加してください。

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

mainメソッド内で

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


値を返すメソッド

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

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


setYoryo(), getYoryo()

こんなことをしなくてもオブジェクト内の変数を直接参照すれば可能です。

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

この方法を利用すると、変数の修正などがすべてクラス内で管理できるからです。


this

thisはキーワードです。

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

このページで示したプログラムではthis.がなくてもどの変数を指しているか明らかなので省略して

のように書けます。

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

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


メソッドの継承

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

クラス1でメソッドmethod1()が定義されている時には、 そのサブクラスでmethod1()が定義されていなくても利用できるということです。

呼び出しが行われたら、スーパークラスで定義されているメソッドが使われます。

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

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

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