コンストラクタの定義と呼び出し
コンストラクタはメソッドに似ていますが、コンストラクタの名前はクラス名と同じにする必要があることや、戻り値の型を記述しないことなど、いくつかの違いがあります。ここではオブジェクト指向におけるコンストラクタの定義と呼び出し方について解説します。
コンストラクタの書式
コンストラクタを作成する場合の書式は次の通りです。コンストラクタはクラス名と同じ名前で定義します。通常のメソッドとは異なり、コンストラクタには戻り値の型を書きません。 void も記述しません。
class クラス名 {
アクセス修飾子 クラス名(引数の型 変数, 引数の型 変数, ...){
// 初期化処理
}
}
それぞれについて順番に解説します。
引数がなく、アクセス修飾子を省略した場合、コンストラクタは次のようになります。
class クラス名 {
クラス名(){
// 初期化処理
}
}
先に記述した通り、コンストラクタ名はクラス名と同じになります。例えば Product クラスのコンストラクタの名前は Product になります。
class Product {
Product(){ // コンストラクタ名はクラス名と同じ
// 初期化処理
}
}
アクセス修飾子
通常のメソッドと同じようにコンストラクタにもアクセス修飾子を指定します。 public、private、protected、または省略(default)のいずれかを指定します。
public : どこからでもアクセス可能 private : 同じクラス内のみアクセス可能 protected : 同じパッケージ、またはサブクラスからアクセス可能 なし(default) : 同じパッケージ内からアクセス可能
※ アクセス修飾子について詳しくは「アクセス修飾子(public / private)」を参照されてください。
通常のメソッドの場合、設定したアクセス修飾子によってどこから呼び出すことができるのかが決まります。一方コンストラクタは、オブジェクトを作成するときに呼び出されるため、設定したアクセス修飾子によってどこからオブジェクトを作成できるのかが決まります。
class クラス名 {
アクセス修飾子 クラス名(){
// 初期化処理
}
}
コンストラクタのアクセス修飾子については、省略するか public を設定することが多いですが、オブジェクトを作成する必要がないクラスなど特別な目的のクラスの場合 private が設定されることがあります。
class Product {
public Product(){
// 初期化処理
}
}
コンストラクタの引数
コンストラクタはメソッドと同じように引数を受け取ることができます。受け取る引数のデータ型と受け取った引数を格納する変数を記述してください。複数の引数を受け取る場合は、カンマ(,)で区切って続けて記述してください。
class クラス名 {
アクセス修飾子 クラス名(引数の型 変数, 引数の型 変数, ...){
// 初期化処理
}
}
例えば int 型の引数と String 型の引数を受け取る場合は、次のように記述します。
class Product {
public Product(int num, String name) {
// 初期化処理
}
}
オブジェクトの作成時にコンストラクタでクラスのフィールドに指定した初期値を設定する場合に、引数を持つコンストラクタがよく使用されます。
コンストラクタの呼び出し
コンストラクタはメソッドのように自分で呼び出すものではなく、new を使ってオブジェクトを作成するときに自動的に呼び出されます。メソッドのように好きなタイミングで呼び出せるものではありません。
Product p = new Product(100);
new によって Product クラスのオブジェクトが作成され、その後、自動的にコンストラクタが呼び出されます。。引数が指定されているのでコンストラクタには 100 という値が渡されます。
では簡単なサンプルを使ってオブジェクト作成時にコンストラクタが自動的に呼び出されていることを確認してみます。テキストエディタで次のように記述したあと、 Sample.java という名前で保存します。
public class Sample {
public static void main(String[] args) {
Product p = new Product();
System.out.println("オブジェクトの作成が完了しました");
}
}
class Product {
public Product() {
System.out.println("コンストラクタが呼び出されました");
}
}
コンパイルを行います。
javac -encoding UTF-8 Sample.java
その後で、次のように実行してください。
java Sample
今回はプログラムが実行されると Product クラスのオブジェクトを作成します。 new によってオブジェクトが作成されると、自動的にコンストラクタが呼び出されます。その後、オブジェクト作成の次の処理が実行されていることが確認できます。
-- --
オブジェクト指向におけるコンストラクタの定義と呼び出し方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。