welcome: please sign in
location: "コンストラクタ"の差分
9と19のリビジョン間の差分 (その間の編集: 10回)
2008-11-10 05:38:49時点のリビジョン9
サイズ: 3485
編集者: masahiko
コメント:
2010-11-06 13:06:22時点のリビジョン19
サイズ: 3827
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
== クラス ==

 . クラスはオブジェクトの'''状態'''と'''動作'''をサポートする。
 . オブジェクトの状態は'''属性'''の集まりとして表される。
 . オブジェクトの動作は'''メソッド'''で記述される。

クラスの記述(プログラム)は次のような形式になる。
5つの項目があるが、必要なものだけ記述すればよい。

 {{{
 修飾子 class クラス名
 {
     static変数の宣言
     属性の宣言
     コンストラクタの定義
     普通のメソッドの定義
     staticメソッドの定義
 }
 }}}

コンストラクタ、普通のメソッド、staticメソッドをあわせてメソッドと言います。

static変数、staticメソッドについては後日解説します。

----
行 33: 行 8:
 public class Card  public class Item
行 35: 行 10:
  String suit;
  int rank;
  String name;
  int price;
行 40: 行 15:
   Card a;
   a = new Card();
   a.suit = "ハート";
   a.rank = 12;
   Item a;
   a = new Item();
   a.name = "おにぎり";
   a.price = 120;
行 48: 行 23:
この例では new Crad() が行われるとインスタンス(そのクラスのオブジェクト)が作られ、
a.suit、a.rankによって、そのインスタンスの属性にアクセスすることができました。
この例では new Item() が行われるとインスタンス(そのクラスのオブジェクト)が作られ、
a.name、a.priceによって、そのインスタンスの属性(変数)にアクセスすることができました。
行 51: 行 26:
インスタンスを生成するときに使われる Card() のことをコンストラクタと言います。 インスタンスを生成するときに使われる Item() のことをコンストラクタと言います。
行 56: 行 31:
----
行 67: 行 42:
 public class Card  public class Item
行 69: 行 44:
  String suit;
  int rank;
  ...
行 72: 行 46:
  Card()   Item()
行 74: 行 48:
   System.out.println("Cardインスタンスを作成しました");    System.out.println("Itemインスタンスを作成しました");
行 79: 行 53:
   Card a;
   a = new Card();
   a.suit = "ハート";
   a
.rank = 12;
   Item a;
   a = new Item();
   ...
行 87: 行 60:
この例では new Card() が呼び出されるとインスタンスが作成され、
Cardインスタンスを作成しました」と表示されます。
この例では new Item() が呼び出されるとインスタンスが作成され、
Itemインスタンスを作成しました」と表示されます。
行 97: 行 70:
 public class Card  public class Item
行 99: 行 72:
  String suit;
  int rank;
  ...

  Item()
  {
   System.out.println("Itemインスタンスを作成しました");
  }
行 102: 行 80:
  Card(String s, int r)   Item(String name, int price)
行 104: 行 82:
   suit = s;
   rank = r;
   this.name = name;
   this.price = price;
行 110: 行 88:
   Card a;
   a = new Card("ハート", 12);
   Item a;
   a = new Item("ガム", 150);
行 120: 行 98:
コンストラクタ内で使われている suit, rank の2つの名前は、
今作成したインスタンスの中の変数のことです。
----
=== コンストラクタを記述するときの注意 ===

引数の個数が異なれば、いくつでもコンストラクタを記述することができました。

 * 引数のあるコンストラクタを記述するときは、引数のないコンストラクタも記述するようにしましょう。

記述していなくても使うことがなければ問題ありませんが、
後日そのクラスのサブクラスを作成することがあれば、
気づかないうちに引数のないコンストラクタが使われるかもしれません。
----
=== 例 ===
今回記述したDrinkクラスの例です。
 * 引数のないコンストラクタの本体は空にしています。
 * mainメソッドの内容は省略しました。
{{{#!java
public class Drink extends Item
{
 int yoryo;

 Drink()
 {
 }
 
 Drink(String namae, int kakaku, int yoryo)
 {
  this.namae = namae;
  this.kakaku = kakaku;
  this.yoryo = yoryo;
 }

 int getYoryo()
 {
  return this.yoryo;
 }
 
 void setYoryo(int ryo)
 {
  this.yoryo = ryo;
 }
 
 void disp()
 {
  System.out.printf( "%s \\%d %d ml\n", namae, kakaku, yoryo );
 }
 
 public static void main(String[] args)
 {
  ...
 }
}
}}}

コンストラクタ

属性(の集まり)がインスタンスの型紙として使われました。

属性の宣言は変数の宣言と同じ書き方をしますが、ここに変数が取られるわけではありません。

  •    1  public class Item
       2  {
       3         String name;
       4         int price;
       5         
       6         public static void main(String[] args)
       7         {
       8                 Item a;                 
       9                 a = new Item();
      10                 a.name = "おにぎり";
      11                 a.price = 120;
      12         }
      13  }
    

この例では new Item() が行われるとインスタンス(そのクラスのオブジェクト)が作られ、 a.name、a.priceによって、そのインスタンスの属性(変数)にアクセスすることができました。

インスタンスを生成するときに使われる Item() のことをコンストラクタと言います。

  • コンストラクタはクラスと同じ名前です。
  • コンストラクタを呼び出すときは前に new をつけます。
  • コンストラクタが呼び出されるとインスタンスが作成されます。


コンストラクタの定義

コンストラクタは定義しなくてもかまいません。

インスタンス作成時になんらかの処理をしたいときには、 コンストラクタを定義して記述します。

  • コンストラクタには戻り値を指定できません。
       1  public class Item
       2  {
       3         ...
       4         
       5         Item()
       6         {
       7                 System.out.println("Itemインスタンスを作成しました");
       8         }
       9  
      10         public static void main(String[] args)
      11         {
      12                 Item a;                 
      13                 a = new Item();
      14                 ...
      15         }
      16  }
    

この例では new Item() が呼び出されるとインスタンスが作成され、 「Itemインスタンスを作成しました」と表示されます。

オーバーロード

引数をとるコンストラクタを定義することもできます。

引数の型や引数の個数が異なればいくつコンストラクタを定義してもよい。

  •    1  public class Item
       2  {
       3         ...
       4 
       5         Item()
       6         {
       7                 System.out.println("Itemインスタンスを作成しました");
       8         }
       9 
      10         
      11         Item(String name, int price)
      12         {
      13                 this.name = name;
      14                 this.price = price;
      15         }
      16  
      17         public static void main(String[] args)
      18         {
      19                 Item a;                 
      20                 a = new Item("ガム", 150);
      21         }
      22  }
    

インスタンスを作成すると同時に、インスタンス変数に値を代入するコンストラクタの例です。

値はコンストラクタの引数として与えています。


コンストラクタを記述するときの注意

引数の個数が異なれば、いくつでもコンストラクタを記述することができました。

  • 引数のあるコンストラクタを記述するときは、引数のないコンストラクタも記述するようにしましょう。

記述していなくても使うことがなければ問題ありませんが、 後日そのクラスのサブクラスを作成することがあれば、 気づかないうちに引数のないコンストラクタが使われるかもしれません。


今回記述したDrinkクラスの例です。

  • 引数のないコンストラクタの本体は空にしています。
  • mainメソッドの内容は省略しました。

   1 public class Drink extends Item
   2 {
   3         int yoryo;
   4 
   5         Drink()
   6         {
   7         }
   8         
   9         Drink(String namae, int kakaku, int yoryo)
  10         {
  11                 this.namae = namae;
  12                 this.kakaku = kakaku;
  13                 this.yoryo = yoryo;
  14         }
  15 
  16         int getYoryo()
  17         {
  18                 return this.yoryo;
  19         }
  20         
  21         void setYoryo(int ryo)
  22         {
  23                 this.yoryo = ryo;
  24         }
  25         
  26         void disp()
  27         {
  28                 System.out.printf( "%s \\%d %d ml\n", namae, kakaku, yoryo );
  29         }
  30         
  31         public static void main(String[] args)
  32         {
  33                 ...
  34         }
  35 }

コンストラクタ (最終更新日時 2010-11-08 01:56:04 更新者 masahiko)