Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでプライベートコンストラクタを実装する方法を解説


この記事では、Javaにおけるプライベートコンストラクタ(private constructor)の実装方法について解説します。プライベートコンストラクタを使用すると、クラスのインスタンス化(オブジェクトの生成)を制限することができます。

プライベートコンストラクタとは?

コンストラクタに「private」修飾子を付けると、そのクラスの外部から new 演算子によるオブジェクト生成ができなくなります。ただし、同じクラス内部に定義された static メソッドからであれば、プライベートコンストラクタを呼び出してインスタンスを作成できます。

この仕組みは、シングルトンパターン(Singleton Pattern)のように、インスタンスの生成を1つに限定したい場面でよく利用されます。

アルゴリズム

  1. 処理を開始する。
  2. 「private」キーワードを使ってプライベートコンストラクタを定義する。
  3. コンストラクタを private にすることで、クラスの外部からオブジェクトを生成できなくなる。
  4. プライベートコンストラクタは、同じクラス内の static メソッドと組み合わせて使用できる。
  5. プライベートコンストラクタは、一般的にシングルトンデザインパターンで活用される。
  6. main メソッド内で print 文により static メソッドを呼び出す。
  7. 結果がコンソールに表示される。

例1: 同一クラス内からの呼び出し

まず、同じクラス内に定義した static メソッドからプライベートコンストラクタを呼び出す基本例を見てみましょう。

class PrivateConstructor {
   private PrivateConstructor() {
      System.out.println("A private constructor is being called.");
   }
   public static void instanceMethod() {
      PrivateConstructor my_object = new PrivateConstructor();
   }
}
public class Main {
   public static void main(String[] args) {
      System.out.println("Invoking a call to private constructor");
      PrivateConstructor.instanceMethod();
   }
}

出力結果

Invoking a call to private constructor
A private constructor is being called.

main メソッドから直接「new PrivateConstructor()」とすることはできませんが、同クラス内の static メソッド instanceMethod() を経由すれば、プライベートコンストラクタを呼び出してインスタンスを生成できることがわかります。

例2: シングルトンパターンでの実装

次に、プライベートコンストラクタを活用したシングルトンパターンの例を紹介します。getInstance() メソッドを通じてのみインスタンスを取得できるため、何度呼び出しても同じインスタンスが返されます。

import java.io.*;
class PrivateConstructor {
   static PrivateConstructor instance = null;
   public int my_input = 10;
   private PrivateConstructor() { }
   static public PrivateConstructor getInstance() {
      if (instance == null)
         instance = new PrivateConstructor();
      return instance;
   }
}
public class Main {
   public static void main(String args[]) {
      PrivateConstructor a = PrivateConstructor.getInstance();
      PrivateConstructor b = PrivateConstructor.getInstance();
      a.my_input = a.my_input + 10;
      System.out.println("Invoking a call to private constructor");
      System.out.println("The value of first instance = " + a.my_input);
      System.out.println("The value of second instance = " + b.my_input);
   }
}

出力結果

Invoking a call to private constructor
The value of first instance = 20
The value of second instance = 20

変数 a と b はそれぞれ getInstance() で取得していますが、実際には同一のインスタンスを参照しています。そのため、a.my_input の値を +10 すると、b.my_input の値も 20 になります。これこそがシングルトンパターンの動作です。

まとめ

  • プライベートコンストラクタを使うと、クラス外からのインスタンス化を防止できる。
  • 同じクラス内の static メソッドからは呼び出しが可能。
  • シングルトンパターンなど、インスタンスを1つに制限したい設計に有効。
  1. 正方形の面積を求めるJavaプログラムの書き方【初心者向け解説】

    この記事では、Javaを使って正方形の面積を求める方法をわかりやすく解説します。正方形の面積は、次の公式で計算できます。辺 × 辺つまり s2正方形の面積の計算式正方形の1辺の長さを s とすると、その面積は s2(辺の2乗)で表されます。下図のように、縦と横が同じ長さの図形であるため、辺同士を掛け合わせるだけで面積が求まります。入力例1辺の長さ : 4出力例正方形の面積 : 16アルゴリズム処理の流れは以下の手順になります。Step 1 - 開始Step 2 - 整数型の変数 my_side(辺の長さ)と my_area(面積)を宣言するStep 3 - ユーザーから値を読み込む、または値を

  2. Javaでカウンタープログラムを実装する方法をわかりやすく解説

    この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*