== メソッド == クラスのもつ機能を定義したものをメソッドといいます。 メソッドはオブジェクトに対する(オブジェクトを利用した)処理を記述したものとも言えます。 Drinkクラスのメソッドを定義してみましょう。 . {{attachment:drink.png}} クラス図には次の3つの機能(メソッド)が書かれています。 . Drink(...) . disp( ) . zoryo( ) クラス名と同じメソッドはコンストラクタと呼ばれ、別の機能を持ちます。次ページで解説。 ---- {{{#!java public class Drink extends Item { int yoryo; void disp() { System.out.printf("%s \\%d %dml\n", namae, kakaku, yoryo ); } public static void main(String[] args) { Drink ocha; ocha = new Drink(); ocha.namae = "麦茶"; ocha.kakaku = 120; ocha.yoryo = 500; ocha.disp(); } } }}} このクラスのメソッドとして show が定義されています。 使い方は {{{#!java a.show(); }}} のように、インスタンスとメソッド名をピリオドでつなぎ括弧を書きます。 void(値を返さない)型のメソッドの場合 インスタンスxxxに対してメソッドyyy()を行う のように解釈すればよい。 この場合は「インスタンスaに対してshow()を行う」と読めます。 メソッドshow()の中ではprintlnが行われています。 ここで参照されているsuitとrankは、呼び出しで指定されたインスタンスaの変数が使われます。 ---- {{{#!java void add1() { rank = rank + 1; } public static void main(String[] args) { Card a; a = new Card("ハート", 12); a.add1(); a.show(); } }}} メッソドadd1はrankの値を1増やします。 この例では、aの値は「ハートの13」になります。 ---- 値を返すメソッドを記述することもできます。 {{{#!java boolean efuda() { return (rank > 10); } public static void main(String[] args) { Card a; a = new Card("ハート", 12); if (a.efuda()) System.out.println( "aは絵札" ); } }}} ---- 引数をもつメソッドの例です。 {{{#!java int sa(Card c) { return (rank - c.rank); } public static void main(String[] args) { Card a, b; a = new Card("ハート", 12); b = new Card("スペード", 3); System.out.println( "差は" + a.sa(b) ); } } }}} ---- === 機能の継承 === 機能(メソッド)も性質と同様に継承されます。 スーパークラスで定義されたメソッドはサブクラスでも利用できます。 {{{#!java public class クラス1 { void method1() ... } }}} クラス1でメソッドmethod1()が定義されている時には、 そのサブクラスでmethod1()が定義されていなくても利用できるということです。 呼び出しが行われたら、スーパークラスで定義されているメソッドが使われます。 スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することもできます。 この場合サブクラスで定義したメソッドが優先されます。 これをメソッドのオーバーライドといいます。