サイズ: 4148
コメント:
|
サイズ: 5367
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 9: | 行 9: |
クラス図には次の3つの機能(メソッド)が書かれています。 | ---- /!\ '''Edit conflict - other version:''' ---- クラス図には次の4つの機能(メソッド)が書かれています。 |
行 12: | 行 14: |
. zoryo( ) | . setYoryo( ) . getYoryo(...) ---- /!\ '''Edit conflict - your version:''' ---- クラス図には次の4つの機能(メソッド)が書かれています。 . Drink(...) . disp( ) . setYoryo( ) . getYoryo(...) ---- /!\ '''End of edit conflict''' ---- |
行 14: | 行 26: |
このページでは普通のメソッドについて解説します。 |
|
行 28: | 行 42: |
Drink ocha; | Drink a; Drink b; |
行 30: | 行 45: |
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(); |
行 52: | 行 74: |
{{{#!java ocha.disp(); |
{{{ a.disp(); |
行 55: | 行 77: |
のように、インスタンスとメソッド名をピリオドでつなぎ括弧を書きます。 | のように、インスタンスとメソッド名をピリオドでつなぎ後ろに括弧を書きます。 |
行 61: | 行 83: |
この場合は「インスタンスochaに対してdisp()を行う」と読めます。 | この場合は「インスタンスaに対してdisp()を行う」と読めます。 |
行 69: | 行 91: |
上の例のmainメソッドでは メソッドshow()の中ではprintlnが行われています。 |
25行目の . a.disp(); ではaの値がthisに渡されて実行されるので、aが参照しているDrinkインスタンス内の3つの変数の値が表示されます。 |
行 72: | 行 95: |
ここで参照されているsuitとrankは、呼び出しで指定されたインスタンスaの変数が使われます。 | 26行目の . b.disp(); ではbの値がthisに渡されて実行されるので、bが参照しているDrinkインスタンス内の3つの変数の値が表示されます。 |
行 74: | 行 100: |
=== 値を修正するメソッド === メソッド内で、thisが指しているオブジェクト内の変数の値を修正することもできます。 {{{#!java public class Drink extends Item { ... |
|
行 75: | 行 107: |
{{{#!java void add1() { rank = rank + 1; } public static void main(String[] args) { Card a; a = new Card("ハート", 12); a.add1(); a.show(); } |
void zoryo() { this.yoryo = (int)(1.10 * this.yoryo); } ... public static void main(String[] args) { ... a.zoryo(); } } |
行 130: | 行 162: |
---- === 機能の継承 === 機能(メソッド)も性質と同様に継承されます。 |
----- === メソッドの継承 === |
行 153: | 行 183: |
どのクラスのメソッドが実行されるのか . インスタンスの属するクラスに対応するメソッドがあれば、それを実行する。 . 無いときはスーパークラスの同じ名前のメソッドを探して、それを実行する。 . 見つからないときは、親の親の親...と順に探します。 . どうしても見つからないときはエラーになります。 |
メソッド
クラスのもつ機能を定義したものをメソッドといいます。
メソッドはオブジェクトに対する(オブジェクトを利用した)処理を記述したものとも言えます。
Drinkクラスのメソッドを定義してみましょう。
Edit conflict - other version:
クラス図には次の4つの機能(メソッド)が書かれています。
- Drink(...)
- disp( )
- setYoryo( )
- getYoryo(...)
Edit conflict - your version:
クラス図には次の4つの機能(メソッド)が書かれています。
- Drink(...)
- disp( )
- setYoryo( )
- getYoryo(...)
End of edit conflict
クラス名と同じメソッドはコンストラクタと呼ばれ、別の機能を持ちます。次ページで解説。
このページでは普通のメソッドについて解説します。
メソッドの定義
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 に対応付けられてから、 メソッド本体が実行されます。
25行目の
- a.disp();
ではaの値がthisに渡されて実行されるので、aが参照しているDrinkインスタンス内の3つの変数の値が表示されます。
26行目の
- b.disp();
ではbの値がthisに渡されて実行されるので、bが参照しているDrinkインスタンス内の3つの変数の値が表示されます。
値を修正するメソッド
メソッド内で、thisが指しているオブジェクト内の変数の値を修正することもできます。
メッソドadd1はrankの値を1増やします。
この例では、aの値は「ハートの13」になります。
値を返すメソッドを記述することもできます。
引数をもつメソッドの例です。
メソッドの継承
スーパークラスで定義されたメソッドはサブクラスでも利用できます。
クラス1でメソッドmethod1()が定義されている時には、 そのサブクラスでmethod1()が定義されていなくても利用できるということです。
呼び出しが行われたら、スーパークラスで定義されているメソッドが使われます。
スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することもできます。 この場合サブクラスで定義したメソッドが優先されます。
これをメソッドのオーバーライドといいます。
どのクラスのメソッドが実行されるのか
- インスタンスの属するクラスに対応するメソッドがあれば、それを実行する。
- 無いときはスーパークラスの同じ名前のメソッドを探して、それを実行する。
- 見つからないときは、親の親の親...と順に探します。
- どうしても見つからないときはエラーになります。