welcome: please sign in
location: "メソッド"の差分
2と12のリビジョン間の差分 (その間の編集: 10回)
2008-11-12 05:50:51時点のリビジョン2
サイズ: 1130
編集者: masahiko
コメント:
2009-10-23 04:50:38時点のリビジョン12
サイズ: 3460
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 7: 行 7:
Cardクラスを例として説明します。 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();
  }
 }
 }}}
行 9: 行 38:
{{{#!java
public class Card
{
 String suit;
 int rank;
 
 Card(String s, int r)
 {
  suit = s;
  rank = r;
 }
このクラスのメソッドとして show が定義されています。
使い方は
 {{{#!java
 a.show();
 }}}
のように、インスタンスとメソッド名をピリオドでつなぎ括弧を書きます。
行 21: 行 45:
 public static void main(String[] args)
 {
  Card a, b;
  
  a = new Card("ハート", 12);
  b = new Card("スペード", 3);
 }
}
}}}
void(値を返さない)型のメソッドの場合
 インスタンスxxxに対してメソッドyyy()を行う
のように解釈すればよい。
行 31: 行 49:
{{{#!java
 void show()
 {
  System.out.println( suit + " " + rank );
 }
 
 void add1()
 {
  rank = rank + 1;
 }
 
 boolean efuda()
 {
  return (rank > 10);
 }
 
 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);
  a.add1();
  a.show();
  if (a.efuda())
   System.out.println( "絵札" );
  b.show();
  if (b.efuda())
   System.out.println( "絵札" );
  System.out.println( "差は" + a.sa(b) );
 }
}
}}}
この場合は「インスタンス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()が定義されていなくても利用できるということです。

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

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

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

メソッド

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

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

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", namae, kakaku, 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  }
    

このクラスのメソッドとして show が定義されています。 使い方は

  •    1  a.show();
    

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

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

  • インスタンスxxxに対してメソッドyyy()を行う

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

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

メソッドshow()の中ではprintlnが行われています。

ここで参照されているsuitとrankは、呼び出しで指定されたインスタンスaの変数が使われます。


  •    1         void add1()
       2         {
       3                 rank = rank + 1;
       4         }
       5  
       6         public static void main(String[] args)
       7         {
       8                 Card a;         
       9                 a = new Card("ハート", 12);
      10                 a.add1();
      11                 a.show();
      12         }
    

メッソドadd1はrankの値を1増やします。

この例では、aの値は「ハートの13」になります。


値を返すメソッドを記述することもできます。

  •    1         boolean efuda()
       2         {
       3                 return (rank > 10);
       4         }
       5  
       6         public static void main(String[] args)
       7         {
       8                 Card a;
       9                 a = new Card("ハート", 12);
      10                 if (a.efuda())
      11                         System.out.println( "aは絵札" );
      12         }
    


引数をもつメソッドの例です。

  •    1         int sa(Card c)
       2         {
       3                 return (rank - c.rank);
       4         }
       5         
       6         public static void main(String[] args)
       7         {
       8                 Card a, b;              
       9                 a = new Card("ハート", 12);
      10                 b = new Card("スペード", 3);
      11                 System.out.println( "差は" + a.sa(b) );
      12         }
      13  }
    


機能の継承

機能(メソッド)も性質と同様に継承されます。

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

  •    1  public class クラス1
       2  {
       3      void method1()
       4      ...
       5  }
    

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

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

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

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

メソッド (最終更新日時 2011-10-27 05:50:29 更新者 masahiko)