デフォルトコンストラクタ

クラスを定義するときにコンストラクタが一つも用意されていない場合、引数のないコンストラクタが自動的に作成されます。このように自動的に作成されるコンストラクタのことをデフォルトコンストラクタと呼びます。ここではオブジェクト指向におけるデフォルトコンストラクタの役割と、自分でコンストラクタを定義する場合の注意点について解説します。

デフォルトコンストラクタとは

オブジェクト指向のプログラミングでは、オブジェクトを作成すると必ずコンストラクタが自動的に呼び出されます。そのため、対応するコンストラクタが用意されていない場合はエラーとなってしまいます。しかし、これまでのサンプルでもコンストラクタを定義せずにオブジェクトを作成していましたがエラーにはなっていませんでした。

その理由は、クラスでコンストラクタを明示的に定義していない場合、自動的に引数のないコンストラクタが用意されるためです。そのため、明示的にコンストラクタが用意されていなくてもエラーにはなりません。この自動的に用意されるコンストラクタのことをデフォルトコンストラクタといいます。

デフォルトコンストラクタは引数を持たないコンストラクタで、コンストラクタの中では特別な処理は行いません。

class クラス名 {
  クラス名(){
    // 何も処理を行わない
  }
}

例えば次のようにコンストラクタを定義していないクラスがある場合、自動的にデフォルトコンストラクタが用意されます。

class Product {
  int price;
  String name;
}

これは次のように記述した場合と同じです。

class Product {
  int price;
  String name;

  Product (){
  }
}

このクラスにはコンストラクタが定義されていませんが、次のようにオブジェクトを作成することができます。

public class Sample {
  public static void main(String[] args) {
    Product p = new Product();
  }
}

class Product {
  int price;
  String name;
}

コンストラクタを自分で定義した場合

クラスで明示的にコンストラクタが一つでも定義されている場合、デフォルトコンストラクタは自動的には作成されません。

例えば次のように引数のあるコンストラクタを定義した場合を見てみます。

class Product {
  int price;

  Product(int newprice){
    price = newprice;
  }
}

この場合、引数のないコンストラクタは定義されていないため、次のようにオブジェクトを作成するとコンパイルエラーになります。

Product p = new Product();  // エラー

クラスでコンストラクタが定義されている場合に、引数のないコンストラクタを使用するには明示的に自分で定義しておく必要があります。

class Product {
  int price;

  // 引数のないコンストラクタを明示的に作成する
  Product(){
  }

  Product(int newprice){
    price = newprice;
  }
}

このようにコンストラクタを定義する場合は、必要な種類のコンストラクタをすべて自分で定義しておく必要がある点にご注意ください。

-- --

オブジェクト指向におけるデフォルトコンストラクタの役割と、自分でコンストラクタを定義する場合の注意点について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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