プログラミング応用a 第6回 『オブジェクトの初期化・コンストラクタ』 


●オブジェクト初期化の問題点

 まずは,オブジェクトを生成した後,少し経ってからメソッドの中で初期化を行う例を次図で示す。

List 1


上図ではちゃんとオブジェクトの利用(④)の前に初期化(③)をしている。
しかし,上図のように,オブジェクトの生成時(②)から少し経って初期化を行う(③)と,間違った書き方をしてしまって次の表にある問題点(a),(b)が起こる可能性がある。

  間違った書き方
問題点(a) うっかりすると初期化(③)の前にオブジェクトを利用する(④)ように書けてしまう。
問題点(b) そもそも,初期化処理(③)を書き忘れることも考えられる。


そこで,下図のクラス B のように, フィールドの宣言時に初期値を指定してみてはどうだろうか。
List 2

ところが,この方法では,生成されたB型オブジェクトは,すべて
  ・フィールド a には 1 , フィールド b には 2, フィールド c には 3.0
という同じ値を持つことになる。オブジェクトは,それぞれ1個ずつ違う値を持っていて,それぞれが違うものを表す必要がある。

たとえば,今までのサンプルプログラムに登場した「人」を表す Person1型の場合を考えてみよう。
Person1型オブジェクトは,あるものは『20歳の男性』,あるものは『18歳の女性』を表していた。

つまり,生成されたオブジェクトの値がすべて同じになるという上図の方法では,結局個々のオブジェクトを初期化し直す必要が出てきてしまう。

■これらの問題を解決するには
  Java では,この初期化に対する問題を解決するために,
   ・オブジェクトの生成時に,そのオブジェクトに相応しい値に初期化する
 という仕組みを用意している。この仕組みを可能にするのが,初期化のための専用メソッド「コンストラクタ」である。

次へ進む