サイズ: 4431
コメント:
|
サイズ: 4437
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 154: | 行 154: |
. 見つからないときは、親の親の親...を探します。 | . 見つからないときは、親の親の親...と順に探します。 |
メソッド
クラスのもつ機能を定義したものをメソッドといいます。
メソッドはオブジェクトに対する(オブジェクトを利用した)処理を記述したものとも言えます。
Drinkクラスのメソッドを定義してみましょう。
クラス図には次の3つの機能(メソッド)が書かれています。
- Drink(...)
- disp( )
- zoryo( )
クラス名と同じメソッドはコンストラクタと呼ばれ、別の機能を持ちます。次ページで解説。
メソッドの定義
1 public class Drink extends Item 2 { 3 int yoryo; 4 5 void disp() 6 { 7 System.out.printf("%s \\%d %dml\n", this.namae, this.kakaku, this.yoryo ); 8 } 9 10 public static void main(String[] args) 11 { 12 Drink ocha; 13 14 ocha = new Drink(); 15 ocha.namae = "麦茶"; 16 ocha.kakaku = 120; 17 ocha.yoryo = 500; 18 ocha.disp(); 19 } 20 }
Drinkクラスのメソッドとして disp を定義しました。
- 値を返さないので、メソッドの型にはvoidと書きます。
- 内容は3つの値を表示するものです。
System.out.printf("%s \\%d %dml\n", this.namae, this.kakaku, this.yoryo );
メソッドの使い方
値を返さないメソッドの使い方は
インスタンス.メソッド();
です。
ocha.disp();
のように、インスタンスとメソッド名をピリオドでつなぎ括弧を書きます。
void(値を返さない)型のメソッドの場合
- インスタンスxxxに対してメソッドyyy()を行う
のように解釈すればよい。
この場合は「インスタンスochaに対してdisp()を行う」と読めます。
メソッドの動作
メソッドが
- インスタンス.メソッド();
として呼び出されると、このときのインスタンスの値が this に対応付けられてから、 メソッド本体が実行されます。
上の例では ochaの値がthisに渡されるため、ochaが参照しているDrinkインスタンス内の3つの変数の値が表示されます。
メッソドadd1はrankの値を1増やします。
この例では、aの値は「ハートの13」になります。
値を返すメソッドを記述することもできます。
引数をもつメソッドの例です。
メソッドの継承
スーパークラスで定義されたメソッドはサブクラスでも利用できます。
クラス1でメソッドmethod1()が定義されている時には、 そのサブクラスでmethod1()が定義されていなくても利用できるということです。
呼び出しが行われたら、スーパークラスで定義されているメソッドが使われます。
スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することもできます。 この場合サブクラスで定義したメソッドが優先されます。
これをメソッドのオーバーライドといいます。
どのクラスのメソッドが実行されるのか
- インスタンスの属するクラスに対応するメソッドがあれば、それを実行する。
- 無いときはスーパークラスの同じ名前のメソッドを探して、それを実行する。
- 見つからないときは、親の親の親...と順に探します。
- どうしても見つからないときはエラーになります。