コンストラクタとは

オブジェクト指向を使ったプログラミングでは、クラスを元にオブジェクトを作成します。オブジェクトを作成するときには、フィールドへの初期値の設定などの初期化処理を行いたい場合があります。このような場合にコンストラクタを用意しておくと便利です。コンストラクタはメソッドによく似た仕組みで、オブジェクトの作成時に必ず一度自動的に呼び出されます。そのため、初期化処理などをコンストラクタに記述しておくと、オブジェクト作成時に自動的に実行されます。ここではオブジェクト指向におけるコンストラクタの役割について解説します。

コンストラクタとは

クラスにはフィールドやメソッドを定義しますが、コンストラクタと呼ばれる特別なメソッドをクラスに定義しておくことで、オブジェクトを作成するときにフィールドに初期値を自動的に設定することができます。コンストラクタはオブジェクトが作成された直後に必ず一度だけ呼び出されます。具体的な記述方法を見ていく前にコンストラクタがどのようなときに便利なのかを確認してみます。

次のようなクラスを定義しました。フィールドが二つあり、そのフィールドに値を設定するためのメソッドが用意されています。

class Product {
	private int price;
	private String name;

  public void setPrice(int newprice) {
    price = newprice;
  }

  public void setName(String newname) {
    name = newname;
  }
}

このクラスのオブジェクトを作成したあと、初期値をフィールドに設定するには次のように記述します。

public class Sample {
  public static void main(String[] args) {
    Product p = new Product();
    p.setPrice(100);
    p.setName("りんご");
  }
}

class Product {
	private int price;
	private String name;

  public void setPrice(int newprice) {
    price = newprice;
  }

  public void setName(String newname) {
    name = newname;
  }
}

オブジェクトを作成したあとにフィールドに値を設定するのはよく行われる処理ですが、フィールドの数が多い場合には記述漏れなどの心配があります。

コンストラクタはオブジェクトの作成と同時にフィールドの初期化を行いたい場合に便利な仕組みです。コンストラクタはメソッドに似ていますが、オブジェクトが new を使って作成されると自動的に呼び出されます。例えば次のようなコンストラクタをクラスで定義しておきます。

class Product {
	private int price;
	private String name;

  // コンストラクタ
  public Product(int newprice, String newname) {
    price = newprice;
    name = newname;
  }

  public void setPrice(int newprice) {
    price = newprice;
  }

  public void setName(String newname) {
    name = newname;
  }
}

コンストラクタが用意されている場合、このオブジェクトを作成してフィールドの値を初期化するには次のように記述することができます。(元々あったメソッドはここでは使用しないので省略しています)。

public class Sample {
  public static void main(String[] args) {
    Product p = new Product(100, "リンゴ");
  }
}

class Product {
	private int price;
	private String name;

  // コンストラクタ
  public Product(int newprice, String newname) {
    price = newprice;
    name = newname;
  }
}

オブジェクトを作成すると自動的にコンストラクタが呼び出されます。コンストラクタでは引数として渡されてきた値を使ってフィールドの初期値を設定しています。このようにオブジェクトを作成するときに必ず行っておきたい処理を自動的に行うことができます。

今回はフィールドの初期化だけを行っていますが、他にもオブジェクトの作成時に実行したい処理があればコンストラクタの中に記述しておくことができます。

このようにコンストラクタを用意することで、オブジェクトの作成時に必ず実行するべき処理をまとめておくことができます。また、オブジェクトを作成すると自動的にコンストラクタが呼び出されるため、初期化を忘れることがないというメリットがあります。

コンストラクタとメソッドとの違い

コンストラクタはメソッドに似ていますが、次のような違いがあります。

コンストラクタ
  ・クラス名と同じ名前
  ・戻り値の型を記述しない
  ・オブジェクト作成時に自動的に呼び出される

メソッド
  ・自由な名前を付けられる
  ・戻り値の型を記述する
  ・必要なときに呼び出す

コンストラクタはメソッドのように必要に応じて呼び出すものではありません。オブジェクトの作成に伴って実行される処理の一部である点に注意してください。コンストラクタは new を使ってオブジェクトを作成するときに呼び出されます。

-- --

オブジェクト指向におけるコンストラクタの役割について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。