Java でのコンストラクター チェーンの例と実装
公開: 2023-06-05Java では、コンストラクターは、新しく作成されたオブジェクトを初期化するために使用されるコードのブロックとして理解できます。 コンストラクターは、Java のインスタンス メソッドに似ています。 ただし、Java のコンストラクターとメソッドの間には決定的な違いがあります。メソッドには戻り値の型がありますが、コンストラクターには特定の戻り値の型がありません。 プログラマーは、コンストラクターを Java の特別なタイプのメソッドとして参照することがよくあります。
Java のコンストラクターはクラスと同じ名前を持ち、次のようになります。
パブリック クラス myProgram{
//これはコンストラクターです
myProgram(){
}
..
}
コンストラクターが別のコンストラクター内から呼び出されるとき、つまり、Java でコンストラクターの連鎖が発生します。 ただし、コンストラクター チェーンについてさらに詳しく説明する前に、理解を確実にするために、Java でコンストラクターがどのように機能するかをいくつかの例とともに簡単に見てみましょう。
目次
Java のコンストラクターはどのように機能しますか?
コンストラクターがどのように機能するかを理解するために、例を見てみましょう。 myProgram という名前のクラスがあるとします。 このクラスのオブジェクトを作成するときは、次のステートメントを記述する必要があります。
myProgram obj = new myProgram()
ご覧のとおり、上記の例で使用されている new キーワードは、myProgram のオブジェクトを作成し、コンストラクターを呼び出して、この新しく作成されたオブジェクトを初期化します。
これが少しわかりにくいと思われても、心配しないでください。 Java のコンストラクターの動作をより深く理解するために、Java の単純なコンストラクター プログラムを見てみましょう。
Java の基本的なコンストラクター プログラム
コンストラクターを使用する次の Java コードを見てください。
パブリック クラス Test{
ストリングブック;
//コンストラクタ
テスト(){
this.book = 「ライ麦畑でつかまえて」;
}
public static void main(String[] args) {
テスト obj = new Test();
System.out.println(obj.book);
}
}
出力:
ライ麦のキャッチャー
上記のプログラムでは、Program クラスの「obj」という名前のオブジェクトを作成しました。 次に、この新しく作成されたオブジェクトのインスタンス変数名を出力しました。 出力からわかるように、出力はコンストラクターの初期化中に 'book' に渡された値と同じです。
これは、obj オブジェクトが作成された瞬間に、コンストラクターが自動的に呼び出されたことを示しています。 ここでは、現在のオブジェクトを参照するために「this」キーワードを使用しました。 これを行う方法は他にもあります。これについては、この記事の後半でコンストラクター チェーンについて説明する際に説明します。
Java のコンストラクターの基本が固まったところで、Java のコンストラクター チェーンとその仕組みに移りましょう。
単一クラス内のコンストラクターの連鎖
しかし、単一クラスに関係するJava のコンストラクター チェーンとは何でしょうか? 同じクラス内の別のコンストラクターからあるコンストラクターを呼び出すと、そのクラス内でのコンストラクターの連鎖が含まれます。 「this」キーワードは、同じクラス内のコンストラクターチェーンの構文で使用されます。 「this」を使用すると、現在のクラスのインスタンスが参照されます。Java でのコンストラクター チェーンの使用法については、例を使用して理解するのが最善です。
基本/親クラスからのコンストラクターの連鎖
Java のクラスは別のクラスから派生できます。 派生クラスはサブクラスと呼ばれ、派生元のクラスはスーパークラスと呼ばれます。 サブクラスは独自のコンストラクターを持ち、そのスーパークラスのコンストラクターを呼び出すことができます。
スーパークラス コンストラクターでは、必要な入力が後に続く super() という用語が使用されます。 super() キーワードは、サブクラス コンストラクターの最初の行に常に存在する必要があります。
別のコンストラクター、ビルダーからの呼び出し
this() キーワードを使用すると、Java のコンストラクターは同じクラスの別のコンストラクターを呼び出すことができます。 コンストラクターの最初のキーワードは常に this() キーワードである必要があります。このキーワードは、同じ型の別のコンストラクターを呼び出す場合にのみ使用できます。
電話スーパークラス コンストラクター
Java の super() キーワードを使用すると、サブクラスのコンストラクターがスーパークラスのコンストラクターを呼び出すことができます。 super() キーワードは、サブクラスのスーパークラスのコンストラクターを呼び出すためにのみ使用でき、常にサブクラス コンストラクターの最初の行にする必要があります。
コンストラクターが異なる順序で配置されている場合、Java プログラムの動作が異なる場合があります。 クラスに多くのコンストラクターがあり、そのうちの 1 つが this() キーワードを使用して別のコンストラクターを呼び出す場合、コンストラクターの順序を変更するとプログラムの動作が変わる可能性があります。
Init ブロックを使用してコンストラクターをチェーンする別の方法
初期化ブロックの使用は、 Java でのコンストラクター チェーンのもう 1 つのアプローチです。初期化ブロックとして知られるコードのセクションは、次のように実行されます。
Java におけるコンストラクターチェーンの基礎
同じクラスの別のコンストラクターからコンストラクターを呼び出すと、何が起こるかはコンストラクターチェーンとして知られています。 コンストラクター チェーンを行う主な目的は、パラメーターをさまざまなコンストラクターの束に渡し、それらを 1 か所でのみ初期化することです。 こうすることで、すべての初期化を 1 か所で維持しながら、さまざまなコンストラクターをユーザーに提供できるようになります。
コンストラクター チェーンを実行せず、2 つの異なるコンストラクターで 1 つのパラメーターが必要な場合は、そのパラメーターを 2 回初期化する必要があります。 さらに、初期化が変更されるたびに、1 つだけではなくすべてのコンストラクターにそれぞれ変更を加える必要があります。
経験則として、常に引数の少ないコンストラクターから、より多くの引数を指定してコンストラクターを呼び出す必要があります。 また、クラス内で複数のコンストラクターをオーバーロードできることにも注意する必要があります。 ただし、オブジェクトの作成時には、特定のコンストラクターが 1 つだけ呼び出されます。 Java でのプログラミング中に、さまざまなオブジェクトを作成せずに複数のコンストラクターを相互に呼び出す必要がある状況が非常に多く発生します。 あるコンストラクターを別のコンストラクターから呼び出し、それに関与するコンストラクターが別のコンストラクターを呼び出すこのメカニズムは、コンストラクター チェーンとして知られています。
世界のトップ大学のソフトウェアコースをオンラインで学びましょう。 エグゼクティブ PG プログラム、上級認定プログラム、または修士プログラムを取得して、キャリアを加速させましょう。
コンストラクターチェーンを最大限に明確にするために、主に次の 2 つの点に留意する必要があります。
- コンストラクター チェーンの主な目的は、コードを保守することです。 この目的は、プログラム全体で再利用できるコードを 1 つだけ作成できるようにすることです。 こうすることで、コードがクリーンで読みやすくなるだけでなく、すべての修正や変更がすべてのコンストラクターではなく 1 つの場所でのみ行われるため、管理がはるかに簡単になります。
- 呼び出されたコンストラクターは別個のオブジェクトを作成しません。 代わりに、現在実行中のオブジェクトを使用して別のコンストラクターを呼び出します。 これは、コンストラクター内で別のメソッドを呼び出すのと同じですが、コンストラクターでもある点が異なります。
前の例で見たように、このキーワードを使用してコンストラクターのパラメーターにアクセスしました。 同様に、コンストラクターチェーンにも主に 2 つのキーワードが必要です。 その 2 つのキーワードは次のとおりです。
- this – そのメソッド表現は現在のクラスのコンストラクターを呼び出します。
- super – そのメソッド表現は、直接のスーパークラスまたは親スーパークラスのコンストラクターを呼び出します。
さらに、Java のコンストラクター チェーンに関する他の重要な用語と定義をいくつか知っておく必要があります。
- コンストラクターの呼び出し:コンストラクターを呼び出し、そのコンストラクターが正常に呼び出されるとき、それはコンストラクターの呼び出しと呼ばれます。
- コンストラクターの実行:コンストラクターを呼び出すと、制御はコンストラクター本体内のステートメントの実行を開始します。 これはコンストラクターの実行として知られています。
Java におけるコンストラクターチェーンの重要なルール
コンストラクター チェーンの基本が固まったので、Java でコンストラクター チェーンを操作するための重要なルールをいくつか見てみましょう。
- this() は、同じコンストラクターに属するパラメーターのみを呼び出すことができます。
- super() は直接のスーパークラス コンストラクターのみを呼び出すことができます。
- this() と super() はコンストラクターの最初のステートメントである必要があります。
- this () と super() は、どちらも最初のステートメントである必要があるため、同じコンストラクター内で使用することはできませんが、これは実際には不可能です。
- this() ステートメントのないコンストラクターが少なくとも 1 つ必要であるため、同じクラスのすべてのコンストラクターに this() を追加することはできません。
- Java でのコンストラクターの呼び出しと実行は逆に行われます。 したがって、コンストラクターが A、B、C の順序で呼び出された場合、実行は C、B、A の順序で行われます。
たとえば、ここでは、異なるコンストラクターをオーバーロードすることによって動作する 2 つの別個のクラスがあります。 コンストラクターを 2、1、4、3、5 の順序で実行したいとします。
コンストラクターを順番に実行するには、5、3、4、1、2 のように、コンストラクターをまったく逆の順序で呼び出す必要があります (以下の例を参照)。
親クラス
{
親()// 1
{
this(「こんにちは」);
System.out.println(“親 0 引数コンストラクター 1 内”);
}
Parent(String msg)// 2
{
System.out.println(“Parent(String) コンストラクター 2 内”);
}
}
class コンストラクターは親を拡張します
{
コンストラクター()// 3
{
this(10);// 5 つの数値コンストラクターを呼び出します
System.out.println(“in コンストラクター 0 arg コンストラクター 3”);
}
コンストラクター(String msg)// 4
{
super();//1 つの数値の親クラスのコンストラクターを呼び出します
System.out.println(“in Constructor(String msg) arg コンストラクター 4”);
}
コンストラクター(int i)// 5
{
this(“hello”);//4 つの数値コンストラクターを呼び出す
System.out.println(“in Constructor(int i) コンストラクター 5”);
}
// main() メソッド
public static void main(String[] args)
{
コンストラクター cobj = new Constructor(); // 3 つの数値コンストラクターを呼び出す
}
}
出力:
Parent(String) コンストラクター 2 内
親 0 引数コンストラクター 1 内
in Constructor(String msg) arg コンストラクター 4
in Constructor(int i) コンストラクター 5
in コンストラクター 0 arg コンストラクター 3
Java のコンストラクターとコンストラクター チェーンのすべての概念を、最後の例を 1 つ挙げて要約します。
クラスEmp
{
パブリック文字列 EName;
public int Eearnings;
パブリック文字列アドレス。
パブリックEmp()
{
これ(「ラーフル」);
}
public Emp(文字列名)
{
これ(名前、140035);
}
public Emp(文字列名, int sal)
{
this(名前、サル、「ニューデリー」);
}
public Employee(文字列名、整数、文字列追加)
{
this.EName=名前;
this.Eearnings=sal;
this.address=追加;
}
void disp() {
System.out.println(“名前: “+EName);
System.out.println(“給与: “+EEarnings);
System.out.println(“アドレス: “+アドレス);
}
public static void main(String[] args)
{
従業員 obj = new Employee();
obj.disp();
}
}
出力:
従業員名: ラーフル
従業員の給与: 140035
従業員の住所: ニューデリー
結論
以上でこの記事は終わります。 これにより、Java のコンストラクター チェーンに関する疑問が解消され、理解がさらに深まったことを願っています。 upGrad では、世界中の学生が自分の可能性を最大限に発揮し、キャリアで成功できるよう支援すると信じています。 私たちのコースは、新人と経験豊富な専門家の両方を念頭に置いて設計されています。
そのようなコースの 1 つは、特に初めての求職者向けに設計された、 upGrad のソフトウェア エンジニアリングにおけるジョブリンク PG 認定です。 コースの内容を確認して、今すぐ登録してください。 Java、DSA、OODAP、JavaScript、MERN、AWS などの関連するソフトウェア エンジニアリング スキルをすべて業界の専門家や一流の専門家から学びましょう。
Q: Java で 3 つ以上のコンストラクターをチェーンすることは可能ですか?
Java では、最大 2 つのコンストラクター チェーンが許可されます。 こうすることで、より複雑なオブジェクトを作成し、コードの重複を減らすことができます。
Q: Java のコンストラクターが自分自身を呼び出すと、何が起こりますか?
Java のコンストラクターがそれ自体を呼び出すと、スタック オーバーフロー エラーが発生し、無限ループが発生します。
Q: Java のデフォルトのコンストラクターはどのようになりますか?
Java のデフォルトのコンストラクターは、入力を受け入れないコンストラクターです。 クラス内で宣言されたコンストラクターがない場合は、自動的にコンストラクターが生成されます。