サイズ: 4071
コメント:
|
サイズ: 4607
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 14: | 行 14: |
このページでは普通のメソッドについて解説します。 |
|
行 28: | 行 30: |
Drink ocha; | Drink a; Drink b; |
行 30: | 行 33: |
ocha = new Drink(); ocha.namae = "麦茶"; ocha.kakaku = 120; ocha.yoryo = 500; ocha.disp(); |
a = new Drink(); a.namae = "麦茶"; a.kakaku = 120; a.yoryo = 500; b = new Drink(); b.namae = "紅茶"; b.kakaku = 130; b.yoryo = 500; a.disp(); b.disp(); |
行 53: | 行 63: |
ocha.disp(); | a.disp(); |
行 55: | 行 65: |
のように、インスタンスとメソッド名をピリオドでつなぎ括弧を書きます。 | のように、インスタンスとメソッド名をピリオドでつなぎ後ろに括弧を書きます。 |
行 61: | 行 71: |
この場合は「インスタンスochaに対してdisp()を行う」と読めます。 | この場合は「インスタンスaに対してdisp()を行う」と読めます。 |
行 70: | 行 80: |
ochaの値がthisに渡されるため、ochaが参照しているDrinkインスタンス内の3つの変数の値が表示されます。 | aの値がthisに渡されるため、aが参照しているDrinkインスタンス内の3つの変数の値が表示されます。 |
行 129: | 行 139: |
---- === 機能の継承 === 機能(メソッド)も性質と同様に継承されます。 |
----- === メソッドの継承 === |
行 152: | 行 160: |
どのクラスのメソッドが実行されるのか . インスタンスの属するクラスに対応するメソッドがあれば、それを実行する。 . 無いときはスーパークラスの同じ名前のメソッドを探して、それを実行する。 . 見つからないときは、親の親の親...と順に探します。 . どうしても見つからないときはエラーになります。 |
メソッド
クラスのもつ機能を定義したものをメソッドといいます。
メソッドはオブジェクトに対する(オブジェクトを利用した)処理を記述したものとも言えます。
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 a; 13 Drink b; 14 15 a = new Drink(); 16 a.namae = "麦茶"; 17 a.kakaku = 120; 18 a.yoryo = 500; 19 20 b = new Drink(); 21 b.namae = "紅茶"; 22 b.kakaku = 130; 23 b.yoryo = 500; 24 25 a.disp(); 26 b.disp(); 27 } 28 }
Drinkクラスのメソッドとして disp を定義しました。
- 値を返さないので、メソッドの型にはvoidと書きます。
- 内容は3つの値を表示するものです。
System.out.printf("%s \\%d %dml\n", this.namae, this.kakaku, this.yoryo );
メソッドの使い方
値を返さないメソッドの使い方は
インスタンス.メソッド();
です。
a.disp();
のように、インスタンスとメソッド名をピリオドでつなぎ後ろに括弧を書きます。
void(値を返さない)型のメソッドの場合
- インスタンスxxxに対してメソッドyyy()を行う
のように解釈すればよい。
この場合は「インスタンスaに対してdisp()を行う」と読めます。
メソッドの動作
メソッドが
- インスタンス.メソッド();
として呼び出されると、このときのインスタンスの値が this に対応付けられてから、 メソッド本体が実行されます。
上の例では aの値がthisに渡されるため、aが参照しているDrinkインスタンス内の3つの変数の値が表示されます。
メッソドadd1はrankの値を1増やします。
この例では、aの値は「ハートの13」になります。
値を返すメソッドを記述することもできます。
引数をもつメソッドの例です。
メソッドの継承
スーパークラスで定義されたメソッドはサブクラスでも利用できます。
クラス1でメソッドmethod1()が定義されている時には、 そのサブクラスでmethod1()が定義されていなくても利用できるということです。
呼び出しが行われたら、スーパークラスで定義されているメソッドが使われます。
スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することもできます。 この場合サブクラスで定義したメソッドが優先されます。
これをメソッドのオーバーライドといいます。
どのクラスのメソッドが実行されるのか
- インスタンスの属するクラスに対応するメソッドがあれば、それを実行する。
- 無いときはスーパークラスの同じ名前のメソッドを探して、それを実行する。
- 見つからないときは、親の親の親...と順に探します。
- どうしても見つからないときはエラーになります。