welcome: please sign in

2009-11-02 06:12:08時点のリビジョン18

メッセージを消す
location: コンストラクタ

コンストラクタ

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

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

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

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


コンストラクタの定義

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

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

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

オーバーロード

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

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

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

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


コンストラクタの継承

コンストラクタは継承されません。

サブクラスのコンストラクタが呼ばれたときは

  1. スーパークラスのコンストラクタで記述された処理
  2. サブクラスで記述された処理

の順に両方が行われます。


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

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

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


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

   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 }